erosolar-cli 1.7.263 → 1.7.265

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 (321) hide show
  1. package/README.md +24 -148
  2. package/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
  3. package/dist/capabilities/agentSpawningCapability.js +56 -31
  4. package/dist/capabilities/agentSpawningCapability.js.map +1 -1
  5. package/dist/contracts/agent-schemas.json +0 -15
  6. package/dist/contracts/tools.schema.json +0 -9
  7. package/dist/core/agent.d.ts +2 -2
  8. package/dist/core/agent.d.ts.map +1 -1
  9. package/dist/core/agent.js.map +1 -1
  10. package/dist/core/customCommands.d.ts +1 -0
  11. package/dist/core/customCommands.d.ts.map +1 -1
  12. package/dist/core/customCommands.js +3 -0
  13. package/dist/core/customCommands.js.map +1 -1
  14. package/dist/core/hooks.d.ts +113 -0
  15. package/dist/core/hooks.d.ts.map +1 -0
  16. package/dist/core/hooks.js +267 -0
  17. package/dist/core/hooks.js.map +1 -0
  18. package/dist/core/metricsTracker.d.ts +122 -0
  19. package/dist/core/metricsTracker.d.ts.map +1 -0
  20. package/dist/{alpha-zero → core}/metricsTracker.js +2 -5
  21. package/dist/core/metricsTracker.js.map +1 -0
  22. package/dist/core/securityAssessment.d.ts +91 -0
  23. package/dist/core/securityAssessment.d.ts.map +1 -0
  24. package/dist/core/securityAssessment.js +580 -0
  25. package/dist/core/securityAssessment.js.map +1 -0
  26. package/dist/core/toolPreconditions.d.ts.map +1 -1
  27. package/dist/core/toolPreconditions.js +0 -14
  28. package/dist/core/toolPreconditions.js.map +1 -1
  29. package/dist/core/toolRuntime.d.ts +22 -1
  30. package/dist/core/toolRuntime.d.ts.map +1 -1
  31. package/dist/core/toolRuntime.js +0 -5
  32. package/dist/core/toolRuntime.js.map +1 -1
  33. package/dist/core/toolValidation.d.ts.map +1 -1
  34. package/dist/core/toolValidation.js +14 -3
  35. package/dist/core/toolValidation.js.map +1 -1
  36. package/dist/core/validationRunner.d.ts +1 -3
  37. package/dist/core/validationRunner.d.ts.map +1 -1
  38. package/dist/core/validationRunner.js.map +1 -1
  39. package/dist/core/verification.d.ts +137 -0
  40. package/dist/core/verification.d.ts.map +1 -0
  41. package/dist/core/verification.js +323 -0
  42. package/dist/core/verification.js.map +1 -0
  43. package/dist/headless/headlessApp.d.ts.map +1 -1
  44. package/dist/headless/headlessApp.js +21 -0
  45. package/dist/headless/headlessApp.js.map +1 -1
  46. package/dist/mcp/sseClient.d.ts.map +1 -1
  47. package/dist/mcp/sseClient.js +9 -18
  48. package/dist/mcp/sseClient.js.map +1 -1
  49. package/dist/plugins/tools/build/buildPlugin.d.ts +0 -6
  50. package/dist/plugins/tools/build/buildPlugin.d.ts.map +1 -1
  51. package/dist/plugins/tools/build/buildPlugin.js +4 -10
  52. package/dist/plugins/tools/build/buildPlugin.js.map +1 -1
  53. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  54. package/dist/plugins/tools/nodeDefaults.js +0 -2
  55. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  56. package/dist/runtime/agentSession.d.ts +2 -2
  57. package/dist/runtime/agentSession.d.ts.map +1 -1
  58. package/dist/runtime/agentSession.js +2 -2
  59. package/dist/runtime/agentSession.js.map +1 -1
  60. package/dist/shell/interactiveShell.d.ts +11 -7
  61. package/dist/shell/interactiveShell.d.ts.map +1 -1
  62. package/dist/shell/interactiveShell.js +190 -153
  63. package/dist/shell/interactiveShell.js.map +1 -1
  64. package/dist/shell/shellApp.d.ts +2 -0
  65. package/dist/shell/shellApp.d.ts.map +1 -1
  66. package/dist/shell/shellApp.js +36 -1
  67. package/dist/shell/shellApp.js.map +1 -1
  68. package/dist/shell/systemPrompt.d.ts.map +1 -1
  69. package/dist/shell/systemPrompt.js +1 -4
  70. package/dist/shell/systemPrompt.js.map +1 -1
  71. package/dist/shell/terminalInput.d.ts +67 -147
  72. package/dist/shell/terminalInput.d.ts.map +1 -1
  73. package/dist/shell/terminalInput.js +457 -689
  74. package/dist/shell/terminalInput.js.map +1 -1
  75. package/dist/shell/terminalInputAdapter.d.ts +20 -20
  76. package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
  77. package/dist/shell/terminalInputAdapter.js +14 -29
  78. package/dist/shell/terminalInputAdapter.js.map +1 -1
  79. package/dist/subagents/agentConfig.d.ts +27 -0
  80. package/dist/subagents/agentConfig.d.ts.map +1 -0
  81. package/dist/subagents/agentConfig.js +89 -0
  82. package/dist/subagents/agentConfig.js.map +1 -0
  83. package/dist/subagents/agentRegistry.d.ts +33 -0
  84. package/dist/subagents/agentRegistry.d.ts.map +1 -0
  85. package/dist/subagents/agentRegistry.js +162 -0
  86. package/dist/subagents/agentRegistry.js.map +1 -0
  87. package/dist/subagents/taskRunner.d.ts +7 -1
  88. package/dist/subagents/taskRunner.d.ts.map +1 -1
  89. package/dist/subagents/taskRunner.js +180 -47
  90. package/dist/subagents/taskRunner.js.map +1 -1
  91. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  92. package/dist/ui/ShellUIAdapter.js +13 -12
  93. package/dist/ui/ShellUIAdapter.js.map +1 -1
  94. package/dist/ui/display.d.ts +19 -0
  95. package/dist/ui/display.d.ts.map +1 -1
  96. package/dist/ui/display.js +131 -33
  97. package/dist/ui/display.js.map +1 -1
  98. package/dist/ui/theme.d.ts.map +1 -1
  99. package/dist/ui/theme.js +6 -8
  100. package/dist/ui/theme.js.map +1 -1
  101. package/dist/ui/toolDisplay.d.ts +0 -158
  102. package/dist/ui/toolDisplay.d.ts.map +1 -1
  103. package/dist/ui/toolDisplay.js +0 -348
  104. package/dist/ui/toolDisplay.js.map +1 -1
  105. package/dist/ui/unified/layout.d.ts +1 -0
  106. package/dist/ui/unified/layout.d.ts.map +1 -1
  107. package/dist/ui/unified/layout.js +15 -25
  108. package/dist/ui/unified/layout.js.map +1 -1
  109. package/dist/utils/frontmatter.d.ts +10 -0
  110. package/dist/utils/frontmatter.d.ts.map +1 -0
  111. package/dist/utils/frontmatter.js +78 -0
  112. package/dist/utils/frontmatter.js.map +1 -0
  113. package/package.json +1 -1
  114. package/dist/alpha-zero/agentWrapper.d.ts +0 -84
  115. package/dist/alpha-zero/agentWrapper.d.ts.map +0 -1
  116. package/dist/alpha-zero/agentWrapper.js +0 -171
  117. package/dist/alpha-zero/agentWrapper.js.map +0 -1
  118. package/dist/alpha-zero/codeEvaluator.d.ts +0 -25
  119. package/dist/alpha-zero/codeEvaluator.d.ts.map +0 -1
  120. package/dist/alpha-zero/codeEvaluator.js +0 -273
  121. package/dist/alpha-zero/codeEvaluator.js.map +0 -1
  122. package/dist/alpha-zero/competitiveRunner.d.ts +0 -66
  123. package/dist/alpha-zero/competitiveRunner.d.ts.map +0 -1
  124. package/dist/alpha-zero/competitiveRunner.js +0 -224
  125. package/dist/alpha-zero/competitiveRunner.js.map +0 -1
  126. package/dist/alpha-zero/index.d.ts +0 -67
  127. package/dist/alpha-zero/index.d.ts.map +0 -1
  128. package/dist/alpha-zero/index.js +0 -99
  129. package/dist/alpha-zero/index.js.map +0 -1
  130. package/dist/alpha-zero/introspection.d.ts +0 -128
  131. package/dist/alpha-zero/introspection.d.ts.map +0 -1
  132. package/dist/alpha-zero/introspection.js +0 -300
  133. package/dist/alpha-zero/introspection.js.map +0 -1
  134. package/dist/alpha-zero/metricsTracker.d.ts +0 -71
  135. package/dist/alpha-zero/metricsTracker.d.ts.map +0 -1
  136. package/dist/alpha-zero/metricsTracker.js.map +0 -1
  137. package/dist/alpha-zero/security/core.d.ts +0 -125
  138. package/dist/alpha-zero/security/core.d.ts.map +0 -1
  139. package/dist/alpha-zero/security/core.js +0 -271
  140. package/dist/alpha-zero/security/core.js.map +0 -1
  141. package/dist/alpha-zero/security/google.d.ts +0 -125
  142. package/dist/alpha-zero/security/google.d.ts.map +0 -1
  143. package/dist/alpha-zero/security/google.js +0 -311
  144. package/dist/alpha-zero/security/google.js.map +0 -1
  145. package/dist/alpha-zero/security/googleLoader.d.ts +0 -17
  146. package/dist/alpha-zero/security/googleLoader.d.ts.map +0 -1
  147. package/dist/alpha-zero/security/googleLoader.js +0 -41
  148. package/dist/alpha-zero/security/googleLoader.js.map +0 -1
  149. package/dist/alpha-zero/security/index.d.ts +0 -29
  150. package/dist/alpha-zero/security/index.d.ts.map +0 -1
  151. package/dist/alpha-zero/security/index.js +0 -32
  152. package/dist/alpha-zero/security/index.js.map +0 -1
  153. package/dist/alpha-zero/security/simulation.d.ts +0 -124
  154. package/dist/alpha-zero/security/simulation.d.ts.map +0 -1
  155. package/dist/alpha-zero/security/simulation.js +0 -277
  156. package/dist/alpha-zero/security/simulation.js.map +0 -1
  157. package/dist/alpha-zero/selfModification.d.ts +0 -109
  158. package/dist/alpha-zero/selfModification.d.ts.map +0 -1
  159. package/dist/alpha-zero/selfModification.js +0 -233
  160. package/dist/alpha-zero/selfModification.js.map +0 -1
  161. package/dist/alpha-zero/types.d.ts +0 -170
  162. package/dist/alpha-zero/types.d.ts.map +0 -1
  163. package/dist/alpha-zero/types.js +0 -31
  164. package/dist/alpha-zero/types.js.map +0 -1
  165. package/dist/capabilities/securityTestingCapability.d.ts +0 -13
  166. package/dist/capabilities/securityTestingCapability.d.ts.map +0 -1
  167. package/dist/capabilities/securityTestingCapability.js +0 -25
  168. package/dist/capabilities/securityTestingCapability.js.map +0 -1
  169. package/dist/core/aiFlowOptimizer.d.ts +0 -26
  170. package/dist/core/aiFlowOptimizer.d.ts.map +0 -1
  171. package/dist/core/aiFlowOptimizer.js +0 -31
  172. package/dist/core/aiFlowOptimizer.js.map +0 -1
  173. package/dist/core/aiOptimizationEngine.d.ts +0 -158
  174. package/dist/core/aiOptimizationEngine.d.ts.map +0 -1
  175. package/dist/core/aiOptimizationEngine.js +0 -428
  176. package/dist/core/aiOptimizationEngine.js.map +0 -1
  177. package/dist/core/aiOptimizationIntegration.d.ts +0 -93
  178. package/dist/core/aiOptimizationIntegration.d.ts.map +0 -1
  179. package/dist/core/aiOptimizationIntegration.js +0 -250
  180. package/dist/core/aiOptimizationIntegration.js.map +0 -1
  181. package/dist/core/enhancedErrorRecovery.d.ts +0 -100
  182. package/dist/core/enhancedErrorRecovery.d.ts.map +0 -1
  183. package/dist/core/enhancedErrorRecovery.js +0 -345
  184. package/dist/core/enhancedErrorRecovery.js.map +0 -1
  185. package/dist/core/hooksSystem.d.ts +0 -65
  186. package/dist/core/hooksSystem.d.ts.map +0 -1
  187. package/dist/core/hooksSystem.js +0 -273
  188. package/dist/core/hooksSystem.js.map +0 -1
  189. package/dist/core/memorySystem.d.ts +0 -48
  190. package/dist/core/memorySystem.d.ts.map +0 -1
  191. package/dist/core/memorySystem.js +0 -271
  192. package/dist/core/memorySystem.js.map +0 -1
  193. package/dist/core/unified/errors.d.ts +0 -189
  194. package/dist/core/unified/errors.d.ts.map +0 -1
  195. package/dist/core/unified/errors.js +0 -497
  196. package/dist/core/unified/errors.js.map +0 -1
  197. package/dist/core/unified/index.d.ts +0 -19
  198. package/dist/core/unified/index.d.ts.map +0 -1
  199. package/dist/core/unified/index.js +0 -68
  200. package/dist/core/unified/index.js.map +0 -1
  201. package/dist/core/unified/schema.d.ts +0 -101
  202. package/dist/core/unified/schema.d.ts.map +0 -1
  203. package/dist/core/unified/schema.js +0 -350
  204. package/dist/core/unified/schema.js.map +0 -1
  205. package/dist/core/unified/toolRuntime.d.ts +0 -179
  206. package/dist/core/unified/toolRuntime.d.ts.map +0 -1
  207. package/dist/core/unified/toolRuntime.js +0 -517
  208. package/dist/core/unified/toolRuntime.js.map +0 -1
  209. package/dist/core/unified/tools.d.ts +0 -127
  210. package/dist/core/unified/tools.d.ts.map +0 -1
  211. package/dist/core/unified/tools.js +0 -1333
  212. package/dist/core/unified/tools.js.map +0 -1
  213. package/dist/core/unified/types.d.ts +0 -352
  214. package/dist/core/unified/types.d.ts.map +0 -1
  215. package/dist/core/unified/types.js +0 -12
  216. package/dist/core/unified/types.js.map +0 -1
  217. package/dist/core/unified/version.d.ts +0 -209
  218. package/dist/core/unified/version.d.ts.map +0 -1
  219. package/dist/core/unified/version.js +0 -454
  220. package/dist/core/unified/version.js.map +0 -1
  221. package/dist/plugins/tools/security/securityPlugin.d.ts +0 -3
  222. package/dist/plugins/tools/security/securityPlugin.d.ts.map +0 -1
  223. package/dist/plugins/tools/security/securityPlugin.js +0 -12
  224. package/dist/plugins/tools/security/securityPlugin.js.map +0 -1
  225. package/dist/security/active-stack-security.d.ts +0 -112
  226. package/dist/security/active-stack-security.d.ts.map +0 -1
  227. package/dist/security/active-stack-security.js +0 -296
  228. package/dist/security/active-stack-security.js.map +0 -1
  229. package/dist/security/advanced-persistence-research.d.ts +0 -92
  230. package/dist/security/advanced-persistence-research.d.ts.map +0 -1
  231. package/dist/security/advanced-persistence-research.js +0 -195
  232. package/dist/security/advanced-persistence-research.js.map +0 -1
  233. package/dist/security/advanced-targeting.d.ts +0 -119
  234. package/dist/security/advanced-targeting.d.ts.map +0 -1
  235. package/dist/security/advanced-targeting.js +0 -233
  236. package/dist/security/advanced-targeting.js.map +0 -1
  237. package/dist/security/assessment/vulnerabilityAssessment.d.ts +0 -104
  238. package/dist/security/assessment/vulnerabilityAssessment.d.ts.map +0 -1
  239. package/dist/security/assessment/vulnerabilityAssessment.js +0 -315
  240. package/dist/security/assessment/vulnerabilityAssessment.js.map +0 -1
  241. package/dist/security/authorization/securityAuthorization.d.ts +0 -88
  242. package/dist/security/authorization/securityAuthorization.d.ts.map +0 -1
  243. package/dist/security/authorization/securityAuthorization.js +0 -172
  244. package/dist/security/authorization/securityAuthorization.js.map +0 -1
  245. package/dist/security/comprehensive-targeting.d.ts +0 -85
  246. package/dist/security/comprehensive-targeting.d.ts.map +0 -1
  247. package/dist/security/comprehensive-targeting.js +0 -438
  248. package/dist/security/comprehensive-targeting.js.map +0 -1
  249. package/dist/security/global-security-integration.d.ts +0 -91
  250. package/dist/security/global-security-integration.d.ts.map +0 -1
  251. package/dist/security/global-security-integration.js +0 -218
  252. package/dist/security/global-security-integration.js.map +0 -1
  253. package/dist/security/index.d.ts +0 -38
  254. package/dist/security/index.d.ts.map +0 -1
  255. package/dist/security/index.js +0 -47
  256. package/dist/security/index.js.map +0 -1
  257. package/dist/security/persistence-analyzer.d.ts +0 -56
  258. package/dist/security/persistence-analyzer.d.ts.map +0 -1
  259. package/dist/security/persistence-analyzer.js +0 -187
  260. package/dist/security/persistence-analyzer.js.map +0 -1
  261. package/dist/security/persistence-cli.d.ts +0 -36
  262. package/dist/security/persistence-cli.d.ts.map +0 -1
  263. package/dist/security/persistence-cli.js +0 -160
  264. package/dist/security/persistence-cli.js.map +0 -1
  265. package/dist/security/persistence-research.d.ts +0 -92
  266. package/dist/security/persistence-research.d.ts.map +0 -1
  267. package/dist/security/persistence-research.js +0 -364
  268. package/dist/security/persistence-research.js.map +0 -1
  269. package/dist/security/research/persistenceResearch.d.ts +0 -97
  270. package/dist/security/research/persistenceResearch.d.ts.map +0 -1
  271. package/dist/security/research/persistenceResearch.js +0 -282
  272. package/dist/security/research/persistenceResearch.js.map +0 -1
  273. package/dist/security/security-integration.d.ts +0 -74
  274. package/dist/security/security-integration.d.ts.map +0 -1
  275. package/dist/security/security-integration.js +0 -137
  276. package/dist/security/security-integration.js.map +0 -1
  277. package/dist/security/security-testing-framework.d.ts +0 -112
  278. package/dist/security/security-testing-framework.d.ts.map +0 -1
  279. package/dist/security/security-testing-framework.js +0 -364
  280. package/dist/security/security-testing-framework.js.map +0 -1
  281. package/dist/security/simulation/attackSimulation.d.ts +0 -93
  282. package/dist/security/simulation/attackSimulation.d.ts.map +0 -1
  283. package/dist/security/simulation/attackSimulation.js +0 -341
  284. package/dist/security/simulation/attackSimulation.js.map +0 -1
  285. package/dist/security/strategic-operations.d.ts +0 -100
  286. package/dist/security/strategic-operations.d.ts.map +0 -1
  287. package/dist/security/strategic-operations.js +0 -276
  288. package/dist/security/strategic-operations.js.map +0 -1
  289. package/dist/security/tool-security-wrapper.d.ts +0 -58
  290. package/dist/security/tool-security-wrapper.d.ts.map +0 -1
  291. package/dist/security/tool-security-wrapper.js +0 -156
  292. package/dist/security/tool-security-wrapper.js.map +0 -1
  293. package/dist/shell/claudeCodeStreamHandler.d.ts +0 -145
  294. package/dist/shell/claudeCodeStreamHandler.d.ts.map +0 -1
  295. package/dist/shell/claudeCodeStreamHandler.js +0 -322
  296. package/dist/shell/claudeCodeStreamHandler.js.map +0 -1
  297. package/dist/shell/inputQueueManager.d.ts +0 -144
  298. package/dist/shell/inputQueueManager.d.ts.map +0 -1
  299. package/dist/shell/inputQueueManager.js +0 -290
  300. package/dist/shell/inputQueueManager.js.map +0 -1
  301. package/dist/shell/metricsTracker.d.ts +0 -60
  302. package/dist/shell/metricsTracker.d.ts.map +0 -1
  303. package/dist/shell/metricsTracker.js +0 -119
  304. package/dist/shell/metricsTracker.js.map +0 -1
  305. package/dist/shell/streamingOutputManager.d.ts +0 -115
  306. package/dist/shell/streamingOutputManager.d.ts.map +0 -1
  307. package/dist/shell/streamingOutputManager.js +0 -225
  308. package/dist/shell/streamingOutputManager.js.map +0 -1
  309. package/dist/tools/securityTools.d.ts +0 -22
  310. package/dist/tools/securityTools.d.ts.map +0 -1
  311. package/dist/tools/securityTools.js +0 -448
  312. package/dist/tools/securityTools.js.map +0 -1
  313. package/dist/ui/persistentPrompt.d.ts +0 -50
  314. package/dist/ui/persistentPrompt.d.ts.map +0 -1
  315. package/dist/ui/persistentPrompt.js +0 -92
  316. package/dist/ui/persistentPrompt.js.map +0 -1
  317. package/dist/ui/terminalUISchema.d.ts +0 -195
  318. package/dist/ui/terminalUISchema.d.ts.map +0 -1
  319. package/dist/ui/terminalUISchema.js +0 -113
  320. package/dist/ui/terminalUISchema.js.map +0 -1
  321. package/scripts/deploy-security-capabilities.js +0 -178
@@ -1,448 +0,0 @@
1
- /**
2
- * Security Testing Toolkit - Ethical penetration testing and security analysis
3
- *
4
- * IMPORTANT: These tools are for AUTHORIZED security testing only:
5
- * - Your own systems and applications
6
- * - Systems you have explicit written permission to test
7
- * - Bug bounty programs where you're an authorized participant
8
- * - CTF competitions
9
- * - Security research and education
10
- *
11
- * DO NOT use these tools for:
12
- * - Unauthorized access to systems
13
- * - Denial of service attacks
14
- * - Mass scanning without permission
15
- * - Any illegal activities
16
- */
17
- import { exec } from 'node:child_process';
18
- import { promisify } from 'node:util';
19
- import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
20
- import { join, relative } from 'node:path';
21
- const execAsync = promisify(exec);
22
- // Common security patterns to detect
23
- const SECRET_PATTERNS = [
24
- { name: 'AWS Access Key', pattern: /AKIA[0-9A-Z]{16}/g },
25
- { name: 'AWS Secret Key', pattern: /[A-Za-z0-9/+=]{40}/g },
26
- { name: 'GitHub Token', pattern: /gh[pousr]_[A-Za-z0-9_]{36,255}/g },
27
- { name: 'Generic API Key', pattern: /[aA][pP][iI][-_]?[kK][eE][yY][\s:=]+['"]?[A-Za-z0-9-_]{20,}/g },
28
- { name: 'Generic Secret', pattern: /[sS][eE][cC][rR][eE][tT][\s:=]+['"]?[A-Za-z0-9-_]{20,}/g },
29
- { name: 'Private Key', pattern: /-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/g },
30
- { name: 'Password in URL', pattern: /[a-zA-Z]+:\/\/[^:]+:[^@]+@/g },
31
- { name: 'JWT Token', pattern: /eyJ[A-Za-z0-9-_]+\.eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+/g },
32
- ];
33
- // SQL injection patterns
34
- const SQL_INJECTION_PATTERNS = [
35
- { name: 'String concatenation in query', pattern: /query\s*\+\s*['"`]/g },
36
- { name: 'Unparameterized query', pattern: /execute\s*\(\s*['"`][^?$]/g },
37
- { name: 'Direct variable in SQL', pattern: /SELECT.*\$\{[^}]+\}/g },
38
- { name: 'Format string in query', pattern: /f["']SELECT.*\{/g },
39
- ];
40
- // XSS patterns
41
- const XSS_PATTERNS = [
42
- { name: 'innerHTML assignment', pattern: /\.innerHTML\s*=/g },
43
- { name: 'document.write', pattern: /document\.write\s*\(/g },
44
- { name: 'eval with user input', pattern: /eval\s*\([^)]*(?:req|param|input|user)/gi },
45
- { name: 'dangerouslySetInnerHTML', pattern: /dangerouslySetInnerHTML/g },
46
- ];
47
- // Command injection patterns
48
- const COMMAND_INJECTION_PATTERNS = [
49
- { name: 'Shell execution with variable', pattern: /exec\s*\(\s*[`'"].*\$\{/g },
50
- { name: 'Child process spawn', pattern: /spawn\s*\([^)]*\+/g },
51
- { name: 'System call with concat', pattern: /system\s*\([^)]*\+/g },
52
- ];
53
- async function scanFileForSecrets(filePath, workingDir) {
54
- const findings = [];
55
- try {
56
- const content = readFileSync(filePath, 'utf-8');
57
- const lines = content.split('\n');
58
- const relativePath = relative(workingDir, filePath);
59
- for (let i = 0; i < lines.length; i++) {
60
- const line = lines[i] ?? '';
61
- for (const { name, pattern } of SECRET_PATTERNS) {
62
- const regex = new RegExp(pattern.source, pattern.flags);
63
- if (regex.test(line)) {
64
- findings.push({
65
- type: 'secret-exposure',
66
- severity: 'critical',
67
- file: relativePath,
68
- line: i + 1,
69
- description: `Potential ${name} detected`,
70
- code: line.slice(0, 100) + (line.length > 100 ? '...' : ''),
71
- recommendation: 'Remove hardcoded secrets and use environment variables or a secrets manager',
72
- });
73
- }
74
- }
75
- }
76
- }
77
- catch {
78
- // Skip files that can't be read
79
- }
80
- return findings;
81
- }
82
- async function scanFileForVulnerabilities(filePath, workingDir) {
83
- const findings = [];
84
- try {
85
- const content = readFileSync(filePath, 'utf-8');
86
- const lines = content.split('\n');
87
- const relativePath = relative(workingDir, filePath);
88
- // SQL Injection checks
89
- for (let i = 0; i < lines.length; i++) {
90
- const line = lines[i] ?? '';
91
- for (const { name, pattern } of SQL_INJECTION_PATTERNS) {
92
- if (pattern.test(line)) {
93
- findings.push({
94
- type: 'sql-injection',
95
- severity: 'high',
96
- file: relativePath,
97
- line: i + 1,
98
- description: name,
99
- code: line.trim().slice(0, 100),
100
- recommendation: 'Use parameterized queries or prepared statements',
101
- });
102
- }
103
- }
104
- }
105
- // XSS checks
106
- for (let i = 0; i < lines.length; i++) {
107
- const line = lines[i] ?? '';
108
- for (const { name, pattern } of XSS_PATTERNS) {
109
- if (pattern.test(line)) {
110
- findings.push({
111
- type: 'xss',
112
- severity: 'high',
113
- file: relativePath,
114
- line: i + 1,
115
- description: name,
116
- code: line.trim().slice(0, 100),
117
- recommendation: 'Sanitize user input and use safe DOM manipulation methods',
118
- });
119
- }
120
- }
121
- }
122
- // Command Injection checks
123
- for (let i = 0; i < lines.length; i++) {
124
- const line = lines[i] ?? '';
125
- for (const { name, pattern } of COMMAND_INJECTION_PATTERNS) {
126
- if (pattern.test(line)) {
127
- findings.push({
128
- type: 'command-injection',
129
- severity: 'critical',
130
- file: relativePath,
131
- line: i + 1,
132
- description: name,
133
- code: line.trim().slice(0, 100),
134
- recommendation: 'Avoid shell commands with user input, or use strict input validation',
135
- });
136
- }
137
- }
138
- }
139
- }
140
- catch {
141
- // Skip files that can't be read
142
- }
143
- return findings;
144
- }
145
- function walkDirectory(dir, extensions, ignore = ['node_modules', '.git', 'dist', 'build', '__pycache__', '.venv']) {
146
- const files = [];
147
- try {
148
- const entries = readdirSync(dir);
149
- for (const entry of entries) {
150
- const fullPath = join(dir, entry);
151
- if (ignore.some((ig) => entry === ig || fullPath.includes(`/${ig}/`))) {
152
- continue;
153
- }
154
- const stat = statSync(fullPath);
155
- if (stat.isDirectory()) {
156
- files.push(...walkDirectory(fullPath, extensions, ignore));
157
- }
158
- else if (extensions.some((ext) => entry.endsWith(ext))) {
159
- files.push(fullPath);
160
- }
161
- }
162
- }
163
- catch {
164
- // Skip directories we can't read
165
- }
166
- return files;
167
- }
168
- function formatFindings(findings) {
169
- if (findings.length === 0) {
170
- return 'No vulnerabilities found.';
171
- }
172
- const critical = findings.filter((f) => f.severity === 'critical');
173
- const high = findings.filter((f) => f.severity === 'high');
174
- const medium = findings.filter((f) => f.severity === 'medium');
175
- const low = findings.filter((f) => f.severity === 'low');
176
- const lines = [];
177
- lines.push(`Found ${findings.length} potential issues:\n`);
178
- lines.push(` Critical: ${critical.length}`);
179
- lines.push(` High: ${high.length}`);
180
- lines.push(` Medium: ${medium.length}`);
181
- lines.push(` Low: ${low.length}\n`);
182
- const sorted = [...critical, ...high, ...medium, ...low];
183
- for (const finding of sorted.slice(0, 20)) {
184
- const icon = finding.severity === 'critical' ? '🔴' : finding.severity === 'high' ? '🟠' : '🟡';
185
- lines.push(`${icon} [${finding.severity.toUpperCase()}] ${finding.type}`);
186
- lines.push(` File: ${finding.file}:${finding.line}`);
187
- lines.push(` Issue: ${finding.description}`);
188
- lines.push(` Code: ${finding.code}`);
189
- lines.push(` Fix: ${finding.recommendation}\n`);
190
- }
191
- if (sorted.length > 20) {
192
- lines.push(`... and ${sorted.length - 20} more issues`);
193
- }
194
- return lines.join('\n');
195
- }
196
- /**
197
- * Create security testing tools bound to a working directory
198
- */
199
- export function createSecurityTools(workingDir) {
200
- return [
201
- {
202
- name: 'security_scan',
203
- description: 'Scan codebase for common security vulnerabilities (SQL injection, XSS, command injection). For authorized security testing only.',
204
- parameters: {
205
- type: 'object',
206
- properties: {
207
- path: {
208
- type: 'string',
209
- description: 'Directory to scan (defaults to current workspace)',
210
- },
211
- type: {
212
- type: 'string',
213
- enum: ['all', 'secrets', 'sql', 'xss', 'command-injection'],
214
- description: 'Type of vulnerabilities to scan for',
215
- },
216
- },
217
- },
218
- handler: async (args) => {
219
- const targetPath = args['path'] || workingDir;
220
- const scanType = args['type'] || 'all';
221
- const extensions = ['.js', '.ts', '.jsx', '.tsx', '.py', '.rb', '.php', '.java', '.go'];
222
- const files = walkDirectory(targetPath, extensions);
223
- const allFindings = [];
224
- for (const file of files) {
225
- if (scanType === 'all' || scanType === 'secrets') {
226
- allFindings.push(...(await scanFileForSecrets(file, workingDir)));
227
- }
228
- if (scanType === 'all' || ['sql', 'xss', 'command-injection'].includes(scanType)) {
229
- const vulns = await scanFileForVulnerabilities(file, workingDir);
230
- if (scanType !== 'all') {
231
- allFindings.push(...vulns.filter((v) => v.type === scanType));
232
- }
233
- else {
234
- allFindings.push(...vulns);
235
- }
236
- }
237
- }
238
- return formatFindings(allFindings);
239
- },
240
- },
241
- {
242
- name: 'secret_scan',
243
- description: 'Scan for exposed secrets, API keys, and credentials in the codebase.',
244
- parameters: {
245
- type: 'object',
246
- properties: {
247
- path: {
248
- type: 'string',
249
- description: 'Directory to scan (defaults to current workspace)',
250
- },
251
- },
252
- },
253
- handler: async (args) => {
254
- const targetPath = args['path'] || workingDir;
255
- const extensions = ['.js', '.ts', '.jsx', '.tsx', '.py', '.rb', '.php', '.java', '.go', '.env', '.json', '.yaml', '.yml', '.toml', '.conf', '.cfg'];
256
- const files = walkDirectory(targetPath, extensions);
257
- const allFindings = [];
258
- for (const file of files) {
259
- allFindings.push(...(await scanFileForSecrets(file, workingDir)));
260
- }
261
- return formatFindings(allFindings);
262
- },
263
- },
264
- {
265
- name: 'dependency_audit',
266
- description: 'Audit dependencies for known vulnerabilities using npm audit, pip-audit, or similar tools.',
267
- parameters: {
268
- type: 'object',
269
- properties: {
270
- package_manager: {
271
- type: 'string',
272
- enum: ['npm', 'pip', 'auto'],
273
- description: 'Package manager to audit (auto-detected by default)',
274
- },
275
- },
276
- },
277
- handler: async (args) => {
278
- const pm = args['package_manager'] || 'auto';
279
- const results = [];
280
- const hasNpm = existsSync(join(workingDir, 'package.json'));
281
- const hasPip = existsSync(join(workingDir, 'requirements.txt')) ||
282
- existsSync(join(workingDir, 'pyproject.toml'));
283
- if ((pm === 'auto' || pm === 'npm') && hasNpm) {
284
- try {
285
- const { stdout } = await execAsync('npm audit --json', {
286
- cwd: workingDir,
287
- timeout: 60000,
288
- });
289
- const audit = JSON.parse(stdout || '{}');
290
- results.push('=== NPM Audit Results ===');
291
- if (audit.metadata) {
292
- results.push(`Total dependencies: ${audit.metadata.totalDependencies || 'unknown'}`);
293
- results.push(`Vulnerabilities: ${audit.metadata.vulnerabilities?.total || 0}`);
294
- if (audit.metadata.vulnerabilities) {
295
- const v = audit.metadata.vulnerabilities;
296
- results.push(` Critical: ${v.critical || 0}`);
297
- results.push(` High: ${v.high || 0}`);
298
- results.push(` Moderate: ${v.moderate || 0}`);
299
- results.push(` Low: ${v.low || 0}`);
300
- }
301
- }
302
- results.push('');
303
- }
304
- catch {
305
- results.push('NPM audit failed or found vulnerabilities');
306
- results.push('Run `npm audit` manually for details');
307
- results.push('');
308
- }
309
- }
310
- if ((pm === 'auto' || pm === 'pip') && hasPip) {
311
- try {
312
- const { stdout } = await execAsync('pip-audit --format=json 2>/dev/null || pip audit 2>/dev/null || echo "[]"', {
313
- cwd: workingDir,
314
- timeout: 60000,
315
- });
316
- results.push('=== Python Dependency Audit ===');
317
- try {
318
- const vulnerabilities = JSON.parse(stdout);
319
- if (Array.isArray(vulnerabilities) && vulnerabilities.length > 0) {
320
- results.push(`Found ${vulnerabilities.length} vulnerabilities`);
321
- for (const v of vulnerabilities.slice(0, 10)) {
322
- results.push(` - ${v.name}: ${v.vulns?.length || 0} issues`);
323
- }
324
- }
325
- else {
326
- results.push('No known vulnerabilities found');
327
- }
328
- }
329
- catch {
330
- results.push('Audit completed (install pip-audit for detailed results)');
331
- }
332
- results.push('');
333
- }
334
- catch {
335
- results.push('Python audit not available');
336
- results.push('Install pip-audit: pip install pip-audit');
337
- results.push('');
338
- }
339
- }
340
- if (results.length === 0) {
341
- return 'No supported package manager found in this project.';
342
- }
343
- return results.join('\n');
344
- },
345
- },
346
- {
347
- name: 'port_scan',
348
- description: 'Scan ports on a target host. ONLY for authorized targets (your own systems, bug bounty scope, CTF).',
349
- parameters: {
350
- type: 'object',
351
- properties: {
352
- target: {
353
- type: 'string',
354
- description: 'Target hostname or IP (must be authorized)',
355
- },
356
- ports: {
357
- type: 'string',
358
- description: 'Port range to scan (e.g., "80,443,8080" or "1-1000")',
359
- },
360
- },
361
- required: ['target'],
362
- },
363
- handler: async (args) => {
364
- const target = args['target'];
365
- const portsArg = args['ports'] || '21,22,23,25,53,80,110,139,143,443,445,993,995,3306,3389,5432,5900,8080,8443';
366
- try {
367
- // Use nc (netcat) for basic port scanning
368
- const ports = portsArg.split(',').map((p) => p.trim());
369
- const results = [`Port scan results for ${target}:\n`];
370
- for (const portSpec of ports.slice(0, 20)) { // Limit to prevent abuse
371
- const port = parseInt(portSpec, 10);
372
- if (isNaN(port))
373
- continue;
374
- try {
375
- await execAsync(`nc -z -w1 ${target} ${port}`, { timeout: 2000 });
376
- results.push(` [OPEN] Port ${port}`);
377
- }
378
- catch {
379
- results.push(` [CLOSED/FILTERED] Port ${port}`);
380
- }
381
- }
382
- return results.join('\n');
383
- }
384
- catch (error) {
385
- return `Port scan failed: ${error instanceof Error ? error.message : 'Unknown error'}`;
386
- }
387
- },
388
- },
389
- {
390
- name: 'http_headers_check',
391
- description: 'Check HTTP security headers on a URL. For authorized security testing only.',
392
- parameters: {
393
- type: 'object',
394
- properties: {
395
- url: {
396
- type: 'string',
397
- description: 'URL to check headers for',
398
- },
399
- },
400
- required: ['url'],
401
- },
402
- handler: async (args) => {
403
- const url = args['url'];
404
- try {
405
- const { stdout } = await execAsync(`curl -sI -X GET "${url}" --max-time 10`, {
406
- timeout: 15000,
407
- });
408
- const headers = stdout.toLowerCase();
409
- const findings = [`HTTP Security Headers for ${url}:\n`];
410
- // Check for security headers
411
- const securityHeaders = [
412
- { name: 'Strict-Transport-Security', check: 'strict-transport-security', severity: 'high' },
413
- { name: 'Content-Security-Policy', check: 'content-security-policy', severity: 'medium' },
414
- { name: 'X-Content-Type-Options', check: 'x-content-type-options', severity: 'medium' },
415
- { name: 'X-Frame-Options', check: 'x-frame-options', severity: 'medium' },
416
- { name: 'X-XSS-Protection', check: 'x-xss-protection', severity: 'low' },
417
- { name: 'Referrer-Policy', check: 'referrer-policy', severity: 'low' },
418
- { name: 'Permissions-Policy', check: 'permissions-policy', severity: 'low' },
419
- ];
420
- for (const { name, check, severity } of securityHeaders) {
421
- if (headers.includes(check)) {
422
- findings.push(`✅ ${name}: Present`);
423
- }
424
- else {
425
- const icon = severity === 'high' ? '🔴' : severity === 'medium' ? '🟠' : '🟡';
426
- findings.push(`${icon} ${name}: MISSING (${severity} severity)`);
427
- }
428
- }
429
- // Check for information leakage
430
- findings.push('\nInformation Disclosure:');
431
- if (headers.includes('server:')) {
432
- const serverMatch = stdout.match(/server:\s*(.+)/i);
433
- findings.push(`⚠️ Server header exposes: ${serverMatch?.[1]?.trim() || 'server info'}`);
434
- }
435
- if (headers.includes('x-powered-by:')) {
436
- const poweredBy = stdout.match(/x-powered-by:\s*(.+)/i);
437
- findings.push(`⚠️ X-Powered-By exposes: ${poweredBy?.[1]?.trim() || 'framework info'}`);
438
- }
439
- return findings.join('\n');
440
- }
441
- catch (error) {
442
- return `Header check failed: ${error instanceof Error ? error.message : 'Unknown error'}`;
443
- }
444
- },
445
- },
446
- ];
447
- }
448
- //# sourceMappingURL=securityTools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securityTools.js","sourceRoot":"","sources":["../../src/tools/securityTools.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- import type { Writable } from 'node:stream';
2
- type TtyLikeStream = Writable & {
3
- columns?: number;
4
- rows?: number;
5
- isTTY?: boolean;
6
- };
7
- interface StatusBarState {
8
- fileChanges?: string;
9
- message?: string;
10
- contextUsage?: number;
11
- }
12
- /**
13
- * Lightweight persistent prompt renderer with a minimal status bar.
14
- * Designed to keep output stable while inputs and statuses change.
15
- */
16
- export declare class PersistentPrompt {
17
- private readonly stream;
18
- private promptState;
19
- private disposed;
20
- constructor(stream: TtyLikeStream, promptSymbol?: string);
21
- /**
22
- * Update the current input buffer and cursor location.
23
- */
24
- updateInput(input: string, cursorPosition?: number): void;
25
- /**
26
- * Update status bar fields. Context usage is intentionally not rendered to keep
27
- * the status bar concise and performance focused.
28
- */
29
- updateStatusBar(status: StatusBarState): void;
30
- /**
31
- * Render the current status bar state to the stream.
32
- */
33
- showStatus(): void;
34
- /**
35
- * Show the prompt and current input buffer.
36
- */
37
- show(): void;
38
- /**
39
- * Hide the prompt from further rendering.
40
- */
41
- hide(): void;
42
- /**
43
- * Dispose prompt resources.
44
- */
45
- dispose(): void;
46
- private renderPrompt;
47
- private formatStatusBar;
48
- }
49
- export {};
50
- //# sourceMappingURL=persistentPrompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistentPrompt.d.ts","sourceRoot":"","sources":["../../src/ui/persistentPrompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,KAAK,aAAa,GAAG,QAAQ,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAErF,UAAU,cAAc;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAUD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,aAAa,EAAE,YAAY,SAAO;IAWtD;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,GAAE,MAAqB,GAAG,IAAI;IASvE;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAO7C;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACH,IAAI,IAAI,IAAI;IAMZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,eAAe;CAgBxB"}
@@ -1,92 +0,0 @@
1
- /**
2
- * Lightweight persistent prompt renderer with a minimal status bar.
3
- * Designed to keep output stable while inputs and statuses change.
4
- */
5
- export class PersistentPrompt {
6
- stream;
7
- promptState;
8
- disposed = false;
9
- constructor(stream, promptSymbol = '> ') {
10
- this.stream = stream;
11
- this.promptState = {
12
- promptSymbol,
13
- userInput: '',
14
- cursorPosition: 0,
15
- isVisible: false,
16
- statusBar: {},
17
- };
18
- }
19
- /**
20
- * Update the current input buffer and cursor location.
21
- */
22
- updateInput(input, cursorPosition = input.length) {
23
- this.promptState.userInput = input;
24
- this.promptState.cursorPosition = Math.max(0, Math.min(cursorPosition, input.length));
25
- if (this.promptState.isVisible) {
26
- this.renderPrompt();
27
- }
28
- }
29
- /**
30
- * Update status bar fields. Context usage is intentionally not rendered to keep
31
- * the status bar concise and performance focused.
32
- */
33
- updateStatusBar(status) {
34
- this.promptState.statusBar = {
35
- ...this.promptState.statusBar,
36
- ...status,
37
- };
38
- }
39
- /**
40
- * Render the current status bar state to the stream.
41
- */
42
- showStatus() {
43
- if (this.disposed)
44
- return;
45
- const statusText = this.formatStatusBar();
46
- if (statusText) {
47
- this.stream.write(`${statusText}\n`);
48
- }
49
- }
50
- /**
51
- * Show the prompt and current input buffer.
52
- */
53
- show() {
54
- if (this.disposed)
55
- return;
56
- this.promptState.isVisible = true;
57
- this.renderPrompt();
58
- }
59
- /**
60
- * Hide the prompt from further rendering.
61
- */
62
- hide() {
63
- this.promptState.isVisible = false;
64
- }
65
- /**
66
- * Dispose prompt resources.
67
- */
68
- dispose() {
69
- this.hide();
70
- this.disposed = true;
71
- }
72
- renderPrompt() {
73
- if (!this.promptState.isVisible || this.disposed) {
74
- return;
75
- }
76
- const { promptSymbol, userInput } = this.promptState;
77
- this.stream.write(`${promptSymbol}${userInput}`);
78
- }
79
- formatStatusBar() {
80
- const parts = [];
81
- const { statusBar } = this.promptState;
82
- if (statusBar.fileChanges) {
83
- parts.push(statusBar.fileChanges);
84
- }
85
- // Context usage is intentionally omitted for a lean status bar
86
- if (statusBar.message) {
87
- parts.push(statusBar.message);
88
- }
89
- return parts.join(' • ');
90
- }
91
- }
92
- //# sourceMappingURL=persistentPrompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persistentPrompt.js","sourceRoot":"","sources":["../../src/ui/persistentPrompt.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACV,MAAM,CAAgB;IAC/B,WAAW,CAAc;IACzB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,MAAqB,EAAE,YAAY,GAAG,IAAI;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG;YACjB,YAAY;YACZ,SAAS,EAAE,EAAE;YACb,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,EAAE;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa,EAAE,iBAAyB,KAAK,CAAC,MAAM;QAC9D,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAEtF,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,MAAsB;QACpC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG;YAC3B,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS;YAC7B,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1C,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;IAEO,eAAe;QACrB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAEvC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC;QAED,+DAA+D;QAE/D,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF"}