erosolar-cli 1.7.341 → 1.7.342

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 (327) hide show
  1. package/README.md +24 -148
  2. package/dist/bin/erosolar.js +5 -21
  3. package/dist/bin/erosolar.js.map +1 -1
  4. package/dist/capabilities/agentSpawningCapability.d.ts.map +1 -1
  5. package/dist/capabilities/agentSpawningCapability.js +56 -31
  6. package/dist/capabilities/agentSpawningCapability.js.map +1 -1
  7. package/dist/contracts/agent-schemas.json +0 -15
  8. package/dist/contracts/tools.schema.json +0 -9
  9. package/dist/core/agent.d.ts +2 -2
  10. package/dist/core/agent.d.ts.map +1 -1
  11. package/dist/core/agent.js.map +1 -1
  12. package/dist/core/customCommands.d.ts +1 -0
  13. package/dist/core/customCommands.d.ts.map +1 -1
  14. package/dist/core/customCommands.js +3 -0
  15. package/dist/core/customCommands.js.map +1 -1
  16. package/dist/core/hooks.d.ts +113 -0
  17. package/dist/core/hooks.d.ts.map +1 -0
  18. package/dist/core/hooks.js +267 -0
  19. package/dist/core/hooks.js.map +1 -0
  20. package/dist/core/metricsTracker.d.ts +122 -0
  21. package/dist/core/metricsTracker.d.ts.map +1 -0
  22. package/dist/{alpha-zero → core}/metricsTracker.js +2 -5
  23. package/dist/core/metricsTracker.js.map +1 -0
  24. package/dist/core/securityAssessment.d.ts +91 -0
  25. package/dist/core/securityAssessment.d.ts.map +1 -0
  26. package/dist/core/securityAssessment.js +580 -0
  27. package/dist/core/securityAssessment.js.map +1 -0
  28. package/dist/core/sessionStore.d.ts +2 -0
  29. package/dist/core/sessionStore.d.ts.map +1 -1
  30. package/dist/core/sessionStore.js +1 -0
  31. package/dist/core/sessionStore.js.map +1 -1
  32. package/dist/core/toolPreconditions.d.ts.map +1 -1
  33. package/dist/core/toolPreconditions.js +0 -14
  34. package/dist/core/toolPreconditions.js.map +1 -1
  35. package/dist/core/toolRuntime.d.ts +22 -1
  36. package/dist/core/toolRuntime.d.ts.map +1 -1
  37. package/dist/core/toolRuntime.js +0 -5
  38. package/dist/core/toolRuntime.js.map +1 -1
  39. package/dist/core/toolValidation.d.ts.map +1 -1
  40. package/dist/core/toolValidation.js +14 -3
  41. package/dist/core/toolValidation.js.map +1 -1
  42. package/dist/core/validationRunner.d.ts +1 -3
  43. package/dist/core/validationRunner.d.ts.map +1 -1
  44. package/dist/core/validationRunner.js.map +1 -1
  45. package/dist/core/verification.d.ts +137 -0
  46. package/dist/core/verification.d.ts.map +1 -0
  47. package/dist/core/verification.js +323 -0
  48. package/dist/core/verification.js.map +1 -0
  49. package/dist/headless/headlessApp.d.ts.map +1 -1
  50. package/dist/headless/headlessApp.js +21 -0
  51. package/dist/headless/headlessApp.js.map +1 -1
  52. package/dist/mcp/sseClient.d.ts.map +1 -1
  53. package/dist/mcp/sseClient.js +9 -18
  54. package/dist/mcp/sseClient.js.map +1 -1
  55. package/dist/plugins/tools/build/buildPlugin.d.ts +0 -6
  56. package/dist/plugins/tools/build/buildPlugin.d.ts.map +1 -1
  57. package/dist/plugins/tools/build/buildPlugin.js +4 -10
  58. package/dist/plugins/tools/build/buildPlugin.js.map +1 -1
  59. package/dist/plugins/tools/nodeDefaults.d.ts.map +1 -1
  60. package/dist/plugins/tools/nodeDefaults.js +0 -2
  61. package/dist/plugins/tools/nodeDefaults.js.map +1 -1
  62. package/dist/runtime/agentSession.d.ts +2 -2
  63. package/dist/runtime/agentSession.d.ts.map +1 -1
  64. package/dist/runtime/agentSession.js +2 -2
  65. package/dist/runtime/agentSession.js.map +1 -1
  66. package/dist/shell/interactiveShell.d.ts +19 -7
  67. package/dist/shell/interactiveShell.d.ts.map +1 -1
  68. package/dist/shell/interactiveShell.js +271 -166
  69. package/dist/shell/interactiveShell.js.map +1 -1
  70. package/dist/shell/shellApp.d.ts +2 -0
  71. package/dist/shell/shellApp.d.ts.map +1 -1
  72. package/dist/shell/shellApp.js +82 -9
  73. package/dist/shell/shellApp.js.map +1 -1
  74. package/dist/shell/systemPrompt.d.ts.map +1 -1
  75. package/dist/shell/systemPrompt.js +1 -4
  76. package/dist/shell/systemPrompt.js.map +1 -1
  77. package/dist/shell/terminalInput.d.ts +215 -120
  78. package/dist/shell/terminalInput.d.ts.map +1 -1
  79. package/dist/shell/terminalInput.js +926 -537
  80. package/dist/shell/terminalInput.js.map +1 -1
  81. package/dist/shell/terminalInputAdapter.d.ts +99 -21
  82. package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
  83. package/dist/shell/terminalInputAdapter.js +131 -30
  84. package/dist/shell/terminalInputAdapter.js.map +1 -1
  85. package/dist/subagents/agentConfig.d.ts +27 -0
  86. package/dist/subagents/agentConfig.d.ts.map +1 -0
  87. package/dist/subagents/agentConfig.js +89 -0
  88. package/dist/subagents/agentConfig.js.map +1 -0
  89. package/dist/subagents/agentRegistry.d.ts +33 -0
  90. package/dist/subagents/agentRegistry.d.ts.map +1 -0
  91. package/dist/subagents/agentRegistry.js +162 -0
  92. package/dist/subagents/agentRegistry.js.map +1 -0
  93. package/dist/subagents/taskRunner.d.ts +7 -1
  94. package/dist/subagents/taskRunner.d.ts.map +1 -1
  95. package/dist/subagents/taskRunner.js +180 -47
  96. package/dist/subagents/taskRunner.js.map +1 -1
  97. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  98. package/dist/ui/ShellUIAdapter.js +13 -12
  99. package/dist/ui/ShellUIAdapter.js.map +1 -1
  100. package/dist/ui/display.d.ts +24 -45
  101. package/dist/ui/display.d.ts.map +1 -1
  102. package/dist/ui/display.js +140 -259
  103. package/dist/ui/display.js.map +1 -1
  104. package/dist/ui/theme.d.ts.map +1 -1
  105. package/dist/ui/theme.js +6 -8
  106. package/dist/ui/theme.js.map +1 -1
  107. package/dist/ui/toolDisplay.d.ts +0 -158
  108. package/dist/ui/toolDisplay.d.ts.map +1 -1
  109. package/dist/ui/toolDisplay.js +0 -348
  110. package/dist/ui/toolDisplay.js.map +1 -1
  111. package/dist/ui/unified/layout.d.ts +1 -0
  112. package/dist/ui/unified/layout.d.ts.map +1 -1
  113. package/dist/ui/unified/layout.js +25 -179
  114. package/dist/ui/unified/layout.js.map +1 -1
  115. package/dist/utils/frontmatter.d.ts +10 -0
  116. package/dist/utils/frontmatter.d.ts.map +1 -0
  117. package/dist/utils/frontmatter.js +78 -0
  118. package/dist/utils/frontmatter.js.map +1 -0
  119. package/package.json +4 -4
  120. package/dist/alpha-zero/agentWrapper.d.ts +0 -84
  121. package/dist/alpha-zero/agentWrapper.d.ts.map +0 -1
  122. package/dist/alpha-zero/agentWrapper.js +0 -171
  123. package/dist/alpha-zero/agentWrapper.js.map +0 -1
  124. package/dist/alpha-zero/codeEvaluator.d.ts +0 -25
  125. package/dist/alpha-zero/codeEvaluator.d.ts.map +0 -1
  126. package/dist/alpha-zero/codeEvaluator.js +0 -273
  127. package/dist/alpha-zero/codeEvaluator.js.map +0 -1
  128. package/dist/alpha-zero/competitiveRunner.d.ts +0 -66
  129. package/dist/alpha-zero/competitiveRunner.d.ts.map +0 -1
  130. package/dist/alpha-zero/competitiveRunner.js +0 -224
  131. package/dist/alpha-zero/competitiveRunner.js.map +0 -1
  132. package/dist/alpha-zero/index.d.ts +0 -67
  133. package/dist/alpha-zero/index.d.ts.map +0 -1
  134. package/dist/alpha-zero/index.js +0 -99
  135. package/dist/alpha-zero/index.js.map +0 -1
  136. package/dist/alpha-zero/introspection.d.ts +0 -128
  137. package/dist/alpha-zero/introspection.d.ts.map +0 -1
  138. package/dist/alpha-zero/introspection.js +0 -300
  139. package/dist/alpha-zero/introspection.js.map +0 -1
  140. package/dist/alpha-zero/metricsTracker.d.ts +0 -71
  141. package/dist/alpha-zero/metricsTracker.d.ts.map +0 -1
  142. package/dist/alpha-zero/metricsTracker.js.map +0 -1
  143. package/dist/alpha-zero/security/core.d.ts +0 -125
  144. package/dist/alpha-zero/security/core.d.ts.map +0 -1
  145. package/dist/alpha-zero/security/core.js +0 -271
  146. package/dist/alpha-zero/security/core.js.map +0 -1
  147. package/dist/alpha-zero/security/google.d.ts +0 -125
  148. package/dist/alpha-zero/security/google.d.ts.map +0 -1
  149. package/dist/alpha-zero/security/google.js +0 -311
  150. package/dist/alpha-zero/security/google.js.map +0 -1
  151. package/dist/alpha-zero/security/googleLoader.d.ts +0 -17
  152. package/dist/alpha-zero/security/googleLoader.d.ts.map +0 -1
  153. package/dist/alpha-zero/security/googleLoader.js +0 -41
  154. package/dist/alpha-zero/security/googleLoader.js.map +0 -1
  155. package/dist/alpha-zero/security/index.d.ts +0 -29
  156. package/dist/alpha-zero/security/index.d.ts.map +0 -1
  157. package/dist/alpha-zero/security/index.js +0 -32
  158. package/dist/alpha-zero/security/index.js.map +0 -1
  159. package/dist/alpha-zero/security/simulation.d.ts +0 -124
  160. package/dist/alpha-zero/security/simulation.d.ts.map +0 -1
  161. package/dist/alpha-zero/security/simulation.js +0 -277
  162. package/dist/alpha-zero/security/simulation.js.map +0 -1
  163. package/dist/alpha-zero/selfModification.d.ts +0 -109
  164. package/dist/alpha-zero/selfModification.d.ts.map +0 -1
  165. package/dist/alpha-zero/selfModification.js +0 -233
  166. package/dist/alpha-zero/selfModification.js.map +0 -1
  167. package/dist/alpha-zero/types.d.ts +0 -170
  168. package/dist/alpha-zero/types.d.ts.map +0 -1
  169. package/dist/alpha-zero/types.js +0 -31
  170. package/dist/alpha-zero/types.js.map +0 -1
  171. package/dist/capabilities/securityTestingCapability.d.ts +0 -13
  172. package/dist/capabilities/securityTestingCapability.d.ts.map +0 -1
  173. package/dist/capabilities/securityTestingCapability.js +0 -25
  174. package/dist/capabilities/securityTestingCapability.js.map +0 -1
  175. package/dist/core/aiFlowOptimizer.d.ts +0 -26
  176. package/dist/core/aiFlowOptimizer.d.ts.map +0 -1
  177. package/dist/core/aiFlowOptimizer.js +0 -31
  178. package/dist/core/aiFlowOptimizer.js.map +0 -1
  179. package/dist/core/aiOptimizationEngine.d.ts +0 -158
  180. package/dist/core/aiOptimizationEngine.d.ts.map +0 -1
  181. package/dist/core/aiOptimizationEngine.js +0 -428
  182. package/dist/core/aiOptimizationEngine.js.map +0 -1
  183. package/dist/core/aiOptimizationIntegration.d.ts +0 -93
  184. package/dist/core/aiOptimizationIntegration.d.ts.map +0 -1
  185. package/dist/core/aiOptimizationIntegration.js +0 -250
  186. package/dist/core/aiOptimizationIntegration.js.map +0 -1
  187. package/dist/core/enhancedErrorRecovery.d.ts +0 -100
  188. package/dist/core/enhancedErrorRecovery.d.ts.map +0 -1
  189. package/dist/core/enhancedErrorRecovery.js +0 -345
  190. package/dist/core/enhancedErrorRecovery.js.map +0 -1
  191. package/dist/core/hooksSystem.d.ts +0 -65
  192. package/dist/core/hooksSystem.d.ts.map +0 -1
  193. package/dist/core/hooksSystem.js +0 -273
  194. package/dist/core/hooksSystem.js.map +0 -1
  195. package/dist/core/memorySystem.d.ts +0 -48
  196. package/dist/core/memorySystem.d.ts.map +0 -1
  197. package/dist/core/memorySystem.js +0 -271
  198. package/dist/core/memorySystem.js.map +0 -1
  199. package/dist/core/unified/errors.d.ts +0 -189
  200. package/dist/core/unified/errors.d.ts.map +0 -1
  201. package/dist/core/unified/errors.js +0 -497
  202. package/dist/core/unified/errors.js.map +0 -1
  203. package/dist/core/unified/index.d.ts +0 -19
  204. package/dist/core/unified/index.d.ts.map +0 -1
  205. package/dist/core/unified/index.js +0 -68
  206. package/dist/core/unified/index.js.map +0 -1
  207. package/dist/core/unified/schema.d.ts +0 -101
  208. package/dist/core/unified/schema.d.ts.map +0 -1
  209. package/dist/core/unified/schema.js +0 -350
  210. package/dist/core/unified/schema.js.map +0 -1
  211. package/dist/core/unified/toolRuntime.d.ts +0 -179
  212. package/dist/core/unified/toolRuntime.d.ts.map +0 -1
  213. package/dist/core/unified/toolRuntime.js +0 -517
  214. package/dist/core/unified/toolRuntime.js.map +0 -1
  215. package/dist/core/unified/tools.d.ts +0 -127
  216. package/dist/core/unified/tools.d.ts.map +0 -1
  217. package/dist/core/unified/tools.js +0 -1333
  218. package/dist/core/unified/tools.js.map +0 -1
  219. package/dist/core/unified/types.d.ts +0 -352
  220. package/dist/core/unified/types.d.ts.map +0 -1
  221. package/dist/core/unified/types.js +0 -12
  222. package/dist/core/unified/types.js.map +0 -1
  223. package/dist/core/unified/version.d.ts +0 -209
  224. package/dist/core/unified/version.d.ts.map +0 -1
  225. package/dist/core/unified/version.js +0 -454
  226. package/dist/core/unified/version.js.map +0 -1
  227. package/dist/plugins/tools/security/securityPlugin.d.ts +0 -3
  228. package/dist/plugins/tools/security/securityPlugin.d.ts.map +0 -1
  229. package/dist/plugins/tools/security/securityPlugin.js +0 -12
  230. package/dist/plugins/tools/security/securityPlugin.js.map +0 -1
  231. package/dist/security/active-stack-security.d.ts +0 -112
  232. package/dist/security/active-stack-security.d.ts.map +0 -1
  233. package/dist/security/active-stack-security.js +0 -296
  234. package/dist/security/active-stack-security.js.map +0 -1
  235. package/dist/security/advanced-persistence-research.d.ts +0 -92
  236. package/dist/security/advanced-persistence-research.d.ts.map +0 -1
  237. package/dist/security/advanced-persistence-research.js +0 -195
  238. package/dist/security/advanced-persistence-research.js.map +0 -1
  239. package/dist/security/advanced-targeting.d.ts +0 -119
  240. package/dist/security/advanced-targeting.d.ts.map +0 -1
  241. package/dist/security/advanced-targeting.js +0 -233
  242. package/dist/security/advanced-targeting.js.map +0 -1
  243. package/dist/security/assessment/vulnerabilityAssessment.d.ts +0 -104
  244. package/dist/security/assessment/vulnerabilityAssessment.d.ts.map +0 -1
  245. package/dist/security/assessment/vulnerabilityAssessment.js +0 -315
  246. package/dist/security/assessment/vulnerabilityAssessment.js.map +0 -1
  247. package/dist/security/authorization/securityAuthorization.d.ts +0 -88
  248. package/dist/security/authorization/securityAuthorization.d.ts.map +0 -1
  249. package/dist/security/authorization/securityAuthorization.js +0 -172
  250. package/dist/security/authorization/securityAuthorization.js.map +0 -1
  251. package/dist/security/comprehensive-targeting.d.ts +0 -85
  252. package/dist/security/comprehensive-targeting.d.ts.map +0 -1
  253. package/dist/security/comprehensive-targeting.js +0 -438
  254. package/dist/security/comprehensive-targeting.js.map +0 -1
  255. package/dist/security/global-security-integration.d.ts +0 -91
  256. package/dist/security/global-security-integration.d.ts.map +0 -1
  257. package/dist/security/global-security-integration.js +0 -218
  258. package/dist/security/global-security-integration.js.map +0 -1
  259. package/dist/security/index.d.ts +0 -38
  260. package/dist/security/index.d.ts.map +0 -1
  261. package/dist/security/index.js +0 -47
  262. package/dist/security/index.js.map +0 -1
  263. package/dist/security/persistence-analyzer.d.ts +0 -56
  264. package/dist/security/persistence-analyzer.d.ts.map +0 -1
  265. package/dist/security/persistence-analyzer.js +0 -187
  266. package/dist/security/persistence-analyzer.js.map +0 -1
  267. package/dist/security/persistence-cli.d.ts +0 -36
  268. package/dist/security/persistence-cli.d.ts.map +0 -1
  269. package/dist/security/persistence-cli.js +0 -160
  270. package/dist/security/persistence-cli.js.map +0 -1
  271. package/dist/security/persistence-research.d.ts +0 -92
  272. package/dist/security/persistence-research.d.ts.map +0 -1
  273. package/dist/security/persistence-research.js +0 -364
  274. package/dist/security/persistence-research.js.map +0 -1
  275. package/dist/security/research/persistenceResearch.d.ts +0 -97
  276. package/dist/security/research/persistenceResearch.d.ts.map +0 -1
  277. package/dist/security/research/persistenceResearch.js +0 -282
  278. package/dist/security/research/persistenceResearch.js.map +0 -1
  279. package/dist/security/security-integration.d.ts +0 -74
  280. package/dist/security/security-integration.d.ts.map +0 -1
  281. package/dist/security/security-integration.js +0 -137
  282. package/dist/security/security-integration.js.map +0 -1
  283. package/dist/security/security-testing-framework.d.ts +0 -112
  284. package/dist/security/security-testing-framework.d.ts.map +0 -1
  285. package/dist/security/security-testing-framework.js +0 -364
  286. package/dist/security/security-testing-framework.js.map +0 -1
  287. package/dist/security/simulation/attackSimulation.d.ts +0 -93
  288. package/dist/security/simulation/attackSimulation.d.ts.map +0 -1
  289. package/dist/security/simulation/attackSimulation.js +0 -341
  290. package/dist/security/simulation/attackSimulation.js.map +0 -1
  291. package/dist/security/strategic-operations.d.ts +0 -100
  292. package/dist/security/strategic-operations.d.ts.map +0 -1
  293. package/dist/security/strategic-operations.js +0 -276
  294. package/dist/security/strategic-operations.js.map +0 -1
  295. package/dist/security/tool-security-wrapper.d.ts +0 -58
  296. package/dist/security/tool-security-wrapper.d.ts.map +0 -1
  297. package/dist/security/tool-security-wrapper.js +0 -156
  298. package/dist/security/tool-security-wrapper.js.map +0 -1
  299. package/dist/shell/claudeCodeStreamHandler.d.ts +0 -145
  300. package/dist/shell/claudeCodeStreamHandler.d.ts.map +0 -1
  301. package/dist/shell/claudeCodeStreamHandler.js +0 -322
  302. package/dist/shell/claudeCodeStreamHandler.js.map +0 -1
  303. package/dist/shell/inputQueueManager.d.ts +0 -144
  304. package/dist/shell/inputQueueManager.d.ts.map +0 -1
  305. package/dist/shell/inputQueueManager.js +0 -290
  306. package/dist/shell/inputQueueManager.js.map +0 -1
  307. package/dist/shell/metricsTracker.d.ts +0 -60
  308. package/dist/shell/metricsTracker.d.ts.map +0 -1
  309. package/dist/shell/metricsTracker.js +0 -119
  310. package/dist/shell/metricsTracker.js.map +0 -1
  311. package/dist/shell/streamingOutputManager.d.ts +0 -115
  312. package/dist/shell/streamingOutputManager.d.ts.map +0 -1
  313. package/dist/shell/streamingOutputManager.js +0 -225
  314. package/dist/shell/streamingOutputManager.js.map +0 -1
  315. package/dist/tools/securityTools.d.ts +0 -22
  316. package/dist/tools/securityTools.d.ts.map +0 -1
  317. package/dist/tools/securityTools.js +0 -448
  318. package/dist/tools/securityTools.js.map +0 -1
  319. package/dist/ui/persistentPrompt.d.ts +0 -50
  320. package/dist/ui/persistentPrompt.d.ts.map +0 -1
  321. package/dist/ui/persistentPrompt.js +0 -92
  322. package/dist/ui/persistentPrompt.js.map +0 -1
  323. package/dist/ui/terminalUISchema.d.ts +0 -195
  324. package/dist/ui/terminalUISchema.d.ts.map +0 -1
  325. package/dist/ui/terminalUISchema.js +0 -113
  326. package/dist/ui/terminalUISchema.js.map +0 -1
  327. 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"}