erosolar-cli 1.7.346 → 1.7.347

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 (328) 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 +43 -7
  67. package/dist/shell/interactiveShell.d.ts.map +1 -1
  68. package/dist/shell/interactiveShell.js +417 -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 +252 -120
  78. package/dist/shell/terminalInput.d.ts.map +1 -1
  79. package/dist/shell/terminalInput.js +1117 -541
  80. package/dist/shell/terminalInput.js.map +1 -1
  81. package/dist/shell/terminalInputAdapter.d.ts +106 -24
  82. package/dist/shell/terminalInputAdapter.d.ts.map +1 -1
  83. package/dist/shell/terminalInputAdapter.js +141 -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 +7 -1
  98. package/dist/ui/ShellUIAdapter.d.ts.map +1 -1
  99. package/dist/ui/ShellUIAdapter.js +42 -18
  100. package/dist/ui/ShellUIAdapter.js.map +1 -1
  101. package/dist/ui/display.d.ts +24 -45
  102. package/dist/ui/display.d.ts.map +1 -1
  103. package/dist/ui/display.js +140 -259
  104. package/dist/ui/display.js.map +1 -1
  105. package/dist/ui/theme.d.ts.map +1 -1
  106. package/dist/ui/theme.js +6 -8
  107. package/dist/ui/theme.js.map +1 -1
  108. package/dist/ui/toolDisplay.d.ts +0 -158
  109. package/dist/ui/toolDisplay.d.ts.map +1 -1
  110. package/dist/ui/toolDisplay.js +0 -348
  111. package/dist/ui/toolDisplay.js.map +1 -1
  112. package/dist/ui/unified/layout.d.ts +20 -0
  113. package/dist/ui/unified/layout.d.ts.map +1 -1
  114. package/dist/ui/unified/layout.js +105 -216
  115. package/dist/ui/unified/layout.js.map +1 -1
  116. package/dist/utils/frontmatter.d.ts +10 -0
  117. package/dist/utils/frontmatter.d.ts.map +1 -0
  118. package/dist/utils/frontmatter.js +78 -0
  119. package/dist/utils/frontmatter.js.map +1 -0
  120. package/package.json +4 -4
  121. package/dist/alpha-zero/agentWrapper.d.ts +0 -84
  122. package/dist/alpha-zero/agentWrapper.d.ts.map +0 -1
  123. package/dist/alpha-zero/agentWrapper.js +0 -171
  124. package/dist/alpha-zero/agentWrapper.js.map +0 -1
  125. package/dist/alpha-zero/codeEvaluator.d.ts +0 -25
  126. package/dist/alpha-zero/codeEvaluator.d.ts.map +0 -1
  127. package/dist/alpha-zero/codeEvaluator.js +0 -273
  128. package/dist/alpha-zero/codeEvaluator.js.map +0 -1
  129. package/dist/alpha-zero/competitiveRunner.d.ts +0 -66
  130. package/dist/alpha-zero/competitiveRunner.d.ts.map +0 -1
  131. package/dist/alpha-zero/competitiveRunner.js +0 -224
  132. package/dist/alpha-zero/competitiveRunner.js.map +0 -1
  133. package/dist/alpha-zero/index.d.ts +0 -67
  134. package/dist/alpha-zero/index.d.ts.map +0 -1
  135. package/dist/alpha-zero/index.js +0 -99
  136. package/dist/alpha-zero/index.js.map +0 -1
  137. package/dist/alpha-zero/introspection.d.ts +0 -128
  138. package/dist/alpha-zero/introspection.d.ts.map +0 -1
  139. package/dist/alpha-zero/introspection.js +0 -300
  140. package/dist/alpha-zero/introspection.js.map +0 -1
  141. package/dist/alpha-zero/metricsTracker.d.ts +0 -71
  142. package/dist/alpha-zero/metricsTracker.d.ts.map +0 -1
  143. package/dist/alpha-zero/metricsTracker.js.map +0 -1
  144. package/dist/alpha-zero/security/core.d.ts +0 -125
  145. package/dist/alpha-zero/security/core.d.ts.map +0 -1
  146. package/dist/alpha-zero/security/core.js +0 -271
  147. package/dist/alpha-zero/security/core.js.map +0 -1
  148. package/dist/alpha-zero/security/google.d.ts +0 -125
  149. package/dist/alpha-zero/security/google.d.ts.map +0 -1
  150. package/dist/alpha-zero/security/google.js +0 -311
  151. package/dist/alpha-zero/security/google.js.map +0 -1
  152. package/dist/alpha-zero/security/googleLoader.d.ts +0 -17
  153. package/dist/alpha-zero/security/googleLoader.d.ts.map +0 -1
  154. package/dist/alpha-zero/security/googleLoader.js +0 -41
  155. package/dist/alpha-zero/security/googleLoader.js.map +0 -1
  156. package/dist/alpha-zero/security/index.d.ts +0 -29
  157. package/dist/alpha-zero/security/index.d.ts.map +0 -1
  158. package/dist/alpha-zero/security/index.js +0 -32
  159. package/dist/alpha-zero/security/index.js.map +0 -1
  160. package/dist/alpha-zero/security/simulation.d.ts +0 -124
  161. package/dist/alpha-zero/security/simulation.d.ts.map +0 -1
  162. package/dist/alpha-zero/security/simulation.js +0 -277
  163. package/dist/alpha-zero/security/simulation.js.map +0 -1
  164. package/dist/alpha-zero/selfModification.d.ts +0 -109
  165. package/dist/alpha-zero/selfModification.d.ts.map +0 -1
  166. package/dist/alpha-zero/selfModification.js +0 -233
  167. package/dist/alpha-zero/selfModification.js.map +0 -1
  168. package/dist/alpha-zero/types.d.ts +0 -170
  169. package/dist/alpha-zero/types.d.ts.map +0 -1
  170. package/dist/alpha-zero/types.js +0 -31
  171. package/dist/alpha-zero/types.js.map +0 -1
  172. package/dist/capabilities/securityTestingCapability.d.ts +0 -13
  173. package/dist/capabilities/securityTestingCapability.d.ts.map +0 -1
  174. package/dist/capabilities/securityTestingCapability.js +0 -25
  175. package/dist/capabilities/securityTestingCapability.js.map +0 -1
  176. package/dist/core/aiFlowOptimizer.d.ts +0 -26
  177. package/dist/core/aiFlowOptimizer.d.ts.map +0 -1
  178. package/dist/core/aiFlowOptimizer.js +0 -31
  179. package/dist/core/aiFlowOptimizer.js.map +0 -1
  180. package/dist/core/aiOptimizationEngine.d.ts +0 -158
  181. package/dist/core/aiOptimizationEngine.d.ts.map +0 -1
  182. package/dist/core/aiOptimizationEngine.js +0 -428
  183. package/dist/core/aiOptimizationEngine.js.map +0 -1
  184. package/dist/core/aiOptimizationIntegration.d.ts +0 -93
  185. package/dist/core/aiOptimizationIntegration.d.ts.map +0 -1
  186. package/dist/core/aiOptimizationIntegration.js +0 -250
  187. package/dist/core/aiOptimizationIntegration.js.map +0 -1
  188. package/dist/core/enhancedErrorRecovery.d.ts +0 -100
  189. package/dist/core/enhancedErrorRecovery.d.ts.map +0 -1
  190. package/dist/core/enhancedErrorRecovery.js +0 -345
  191. package/dist/core/enhancedErrorRecovery.js.map +0 -1
  192. package/dist/core/hooksSystem.d.ts +0 -65
  193. package/dist/core/hooksSystem.d.ts.map +0 -1
  194. package/dist/core/hooksSystem.js +0 -273
  195. package/dist/core/hooksSystem.js.map +0 -1
  196. package/dist/core/memorySystem.d.ts +0 -48
  197. package/dist/core/memorySystem.d.ts.map +0 -1
  198. package/dist/core/memorySystem.js +0 -271
  199. package/dist/core/memorySystem.js.map +0 -1
  200. package/dist/core/unified/errors.d.ts +0 -189
  201. package/dist/core/unified/errors.d.ts.map +0 -1
  202. package/dist/core/unified/errors.js +0 -497
  203. package/dist/core/unified/errors.js.map +0 -1
  204. package/dist/core/unified/index.d.ts +0 -19
  205. package/dist/core/unified/index.d.ts.map +0 -1
  206. package/dist/core/unified/index.js +0 -68
  207. package/dist/core/unified/index.js.map +0 -1
  208. package/dist/core/unified/schema.d.ts +0 -101
  209. package/dist/core/unified/schema.d.ts.map +0 -1
  210. package/dist/core/unified/schema.js +0 -350
  211. package/dist/core/unified/schema.js.map +0 -1
  212. package/dist/core/unified/toolRuntime.d.ts +0 -179
  213. package/dist/core/unified/toolRuntime.d.ts.map +0 -1
  214. package/dist/core/unified/toolRuntime.js +0 -517
  215. package/dist/core/unified/toolRuntime.js.map +0 -1
  216. package/dist/core/unified/tools.d.ts +0 -127
  217. package/dist/core/unified/tools.d.ts.map +0 -1
  218. package/dist/core/unified/tools.js +0 -1333
  219. package/dist/core/unified/tools.js.map +0 -1
  220. package/dist/core/unified/types.d.ts +0 -352
  221. package/dist/core/unified/types.d.ts.map +0 -1
  222. package/dist/core/unified/types.js +0 -12
  223. package/dist/core/unified/types.js.map +0 -1
  224. package/dist/core/unified/version.d.ts +0 -209
  225. package/dist/core/unified/version.d.ts.map +0 -1
  226. package/dist/core/unified/version.js +0 -454
  227. package/dist/core/unified/version.js.map +0 -1
  228. package/dist/plugins/tools/security/securityPlugin.d.ts +0 -3
  229. package/dist/plugins/tools/security/securityPlugin.d.ts.map +0 -1
  230. package/dist/plugins/tools/security/securityPlugin.js +0 -12
  231. package/dist/plugins/tools/security/securityPlugin.js.map +0 -1
  232. package/dist/security/active-stack-security.d.ts +0 -112
  233. package/dist/security/active-stack-security.d.ts.map +0 -1
  234. package/dist/security/active-stack-security.js +0 -296
  235. package/dist/security/active-stack-security.js.map +0 -1
  236. package/dist/security/advanced-persistence-research.d.ts +0 -92
  237. package/dist/security/advanced-persistence-research.d.ts.map +0 -1
  238. package/dist/security/advanced-persistence-research.js +0 -195
  239. package/dist/security/advanced-persistence-research.js.map +0 -1
  240. package/dist/security/advanced-targeting.d.ts +0 -119
  241. package/dist/security/advanced-targeting.d.ts.map +0 -1
  242. package/dist/security/advanced-targeting.js +0 -233
  243. package/dist/security/advanced-targeting.js.map +0 -1
  244. package/dist/security/assessment/vulnerabilityAssessment.d.ts +0 -104
  245. package/dist/security/assessment/vulnerabilityAssessment.d.ts.map +0 -1
  246. package/dist/security/assessment/vulnerabilityAssessment.js +0 -315
  247. package/dist/security/assessment/vulnerabilityAssessment.js.map +0 -1
  248. package/dist/security/authorization/securityAuthorization.d.ts +0 -88
  249. package/dist/security/authorization/securityAuthorization.d.ts.map +0 -1
  250. package/dist/security/authorization/securityAuthorization.js +0 -172
  251. package/dist/security/authorization/securityAuthorization.js.map +0 -1
  252. package/dist/security/comprehensive-targeting.d.ts +0 -85
  253. package/dist/security/comprehensive-targeting.d.ts.map +0 -1
  254. package/dist/security/comprehensive-targeting.js +0 -438
  255. package/dist/security/comprehensive-targeting.js.map +0 -1
  256. package/dist/security/global-security-integration.d.ts +0 -91
  257. package/dist/security/global-security-integration.d.ts.map +0 -1
  258. package/dist/security/global-security-integration.js +0 -218
  259. package/dist/security/global-security-integration.js.map +0 -1
  260. package/dist/security/index.d.ts +0 -38
  261. package/dist/security/index.d.ts.map +0 -1
  262. package/dist/security/index.js +0 -47
  263. package/dist/security/index.js.map +0 -1
  264. package/dist/security/persistence-analyzer.d.ts +0 -56
  265. package/dist/security/persistence-analyzer.d.ts.map +0 -1
  266. package/dist/security/persistence-analyzer.js +0 -187
  267. package/dist/security/persistence-analyzer.js.map +0 -1
  268. package/dist/security/persistence-cli.d.ts +0 -36
  269. package/dist/security/persistence-cli.d.ts.map +0 -1
  270. package/dist/security/persistence-cli.js +0 -160
  271. package/dist/security/persistence-cli.js.map +0 -1
  272. package/dist/security/persistence-research.d.ts +0 -92
  273. package/dist/security/persistence-research.d.ts.map +0 -1
  274. package/dist/security/persistence-research.js +0 -364
  275. package/dist/security/persistence-research.js.map +0 -1
  276. package/dist/security/research/persistenceResearch.d.ts +0 -97
  277. package/dist/security/research/persistenceResearch.d.ts.map +0 -1
  278. package/dist/security/research/persistenceResearch.js +0 -282
  279. package/dist/security/research/persistenceResearch.js.map +0 -1
  280. package/dist/security/security-integration.d.ts +0 -74
  281. package/dist/security/security-integration.d.ts.map +0 -1
  282. package/dist/security/security-integration.js +0 -137
  283. package/dist/security/security-integration.js.map +0 -1
  284. package/dist/security/security-testing-framework.d.ts +0 -112
  285. package/dist/security/security-testing-framework.d.ts.map +0 -1
  286. package/dist/security/security-testing-framework.js +0 -364
  287. package/dist/security/security-testing-framework.js.map +0 -1
  288. package/dist/security/simulation/attackSimulation.d.ts +0 -93
  289. package/dist/security/simulation/attackSimulation.d.ts.map +0 -1
  290. package/dist/security/simulation/attackSimulation.js +0 -341
  291. package/dist/security/simulation/attackSimulation.js.map +0 -1
  292. package/dist/security/strategic-operations.d.ts +0 -100
  293. package/dist/security/strategic-operations.d.ts.map +0 -1
  294. package/dist/security/strategic-operations.js +0 -276
  295. package/dist/security/strategic-operations.js.map +0 -1
  296. package/dist/security/tool-security-wrapper.d.ts +0 -58
  297. package/dist/security/tool-security-wrapper.d.ts.map +0 -1
  298. package/dist/security/tool-security-wrapper.js +0 -156
  299. package/dist/security/tool-security-wrapper.js.map +0 -1
  300. package/dist/shell/claudeCodeStreamHandler.d.ts +0 -145
  301. package/dist/shell/claudeCodeStreamHandler.d.ts.map +0 -1
  302. package/dist/shell/claudeCodeStreamHandler.js +0 -322
  303. package/dist/shell/claudeCodeStreamHandler.js.map +0 -1
  304. package/dist/shell/inputQueueManager.d.ts +0 -144
  305. package/dist/shell/inputQueueManager.d.ts.map +0 -1
  306. package/dist/shell/inputQueueManager.js +0 -290
  307. package/dist/shell/inputQueueManager.js.map +0 -1
  308. package/dist/shell/metricsTracker.d.ts +0 -60
  309. package/dist/shell/metricsTracker.d.ts.map +0 -1
  310. package/dist/shell/metricsTracker.js +0 -119
  311. package/dist/shell/metricsTracker.js.map +0 -1
  312. package/dist/shell/streamingOutputManager.d.ts +0 -115
  313. package/dist/shell/streamingOutputManager.d.ts.map +0 -1
  314. package/dist/shell/streamingOutputManager.js +0 -225
  315. package/dist/shell/streamingOutputManager.js.map +0 -1
  316. package/dist/tools/securityTools.d.ts +0 -22
  317. package/dist/tools/securityTools.d.ts.map +0 -1
  318. package/dist/tools/securityTools.js +0 -448
  319. package/dist/tools/securityTools.js.map +0 -1
  320. package/dist/ui/persistentPrompt.d.ts +0 -50
  321. package/dist/ui/persistentPrompt.d.ts.map +0 -1
  322. package/dist/ui/persistentPrompt.js +0 -92
  323. package/dist/ui/persistentPrompt.js.map +0 -1
  324. package/dist/ui/terminalUISchema.d.ts +0 -195
  325. package/dist/ui/terminalUISchema.d.ts.map +0 -1
  326. package/dist/ui/terminalUISchema.js +0 -113
  327. package/dist/ui/terminalUISchema.js.map +0 -1
  328. 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":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,qCAAqC;AACrC,MAAM,eAAe,GAAG;IACtB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAAE;IACxD,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,EAAE;IAC1D,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iCAAiC,EAAE;IACpE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,8DAA8D,EAAE;IACpG,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,yDAAyD,EAAE;IAC9F,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,yDAAyD,EAAE;IAC3F,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACnE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uDAAuD,EAAE;CACxF,CAAC;AAEF,yBAAyB;AACzB,MAAM,sBAAsB,GAAG;IAC7B,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,qBAAqB,EAAE;IACzE,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,EAAE;IACxE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,sBAAsB,EAAE;IACnE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,kBAAkB,EAAE;CAChE,CAAC;AAEF,eAAe;AACf,MAAM,YAAY,GAAG;IACnB,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAC7D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,uBAAuB,EAAE;IAC5D,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,0CAA0C,EAAE;IACrF,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,0BAA0B,EAAE;CACzE,CAAC;AAEF,6BAA6B;AAC7B,MAAM,0BAA0B,GAAG;IACjC,EAAE,IAAI,EAAE,+BAA+B,EAAE,OAAO,EAAE,0BAA0B,EAAE;IAC9E,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,oBAAoB,EAAE;IAC9D,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,qBAAqB,EAAE;CACpE,CAAC;AAYF,KAAK,UAAU,kBAAkB,CAC/B,QAAgB,EAChB,UAAkB;IAElB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;gBAChD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACxD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,iBAAiB;wBACvB,QAAQ,EAAE,UAAU;wBACpB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,WAAW,EAAE,aAAa,IAAI,WAAW;wBACzC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3D,cAAc,EAAE,6EAA6E;qBAC9F,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,QAAgB,EAChB,UAAkB;IAElB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEpD,uBAAuB;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,sBAAsB,EAAE,CAAC;gBACvD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,eAAe;wBACrB,QAAQ,EAAE,MAAM;wBAChB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,WAAW,EAAE,IAAI;wBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC/B,cAAc,EAAE,kDAAkD;qBACnE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,aAAa;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,YAAY,EAAE,CAAC;gBAC7C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,KAAK;wBACX,QAAQ,EAAE,MAAM;wBAChB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,WAAW,EAAE,IAAI;wBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC/B,cAAc,EAAE,2DAA2D;qBAC5E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,0BAA0B,EAAE,CAAC;gBAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,mBAAmB;wBACzB,QAAQ,EAAE,UAAU;wBACpB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,CAAC,GAAG,CAAC;wBACX,WAAW,EAAE,IAAI;wBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBAC/B,cAAc,EAAE,sEAAsE;qBACvF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CACpB,GAAW,EACX,UAAoB,EACpB,SAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC;IAEpF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtE,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,QAAgC;IACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,2BAA2B,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IAEzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,eAAe,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAEzD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,MAAM,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO;QACL;YACE,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,kIAAkI;YAC/I,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mDAAmD;qBACjE;oBACD,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC;wBAC3D,WAAW,EAAE,qCAAqC;qBACnD;iBACF;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC/C,MAAM,UAAU,GAAI,IAAI,CAAC,MAAM,CAAY,IAAI,UAAU,CAAC;gBAC1D,MAAM,QAAQ,GAAI,IAAI,CAAC,MAAM,CAAY,IAAI,KAAK,CAAC;gBAEnD,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBACxF,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAEpD,MAAM,WAAW,GAA2B,EAAE,CAAC;gBAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;wBACjD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;oBACpE,CAAC;oBACD,IAAI,QAAQ,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjF,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;wBACjE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;4BACvB,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;wBAChE,CAAC;6BAAM,CAAC;4BACN,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;wBAC7B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;SACF;QAED;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,sEAAsE;YACnF,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,mDAAmD;qBACjE;iBACF;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC/C,MAAM,UAAU,GAAI,IAAI,CAAC,MAAM,CAAY,IAAI,UAAU,CAAC;gBAC1D,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpJ,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAEpD,MAAM,WAAW,GAA2B,EAAE,CAAC;gBAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBACpE,CAAC;gBAED,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;YACrC,CAAC;SACF;QAED;YACE,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,4FAA4F;YACzG,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,eAAe,EAAE;wBACf,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;wBAC5B,WAAW,EAAE,qDAAqD;qBACnE;iBACF;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC/C,MAAM,EAAE,GAAI,IAAI,CAAC,iBAAiB,CAAY,IAAI,MAAM,CAAC;gBACzD,MAAM,OAAO,GAAa,EAAE,CAAC;gBAE7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;oBAChD,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBAE9D,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;oBAC9C,IAAI,CAAC;wBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,kBAAkB,EAAE;4BACrD,GAAG,EAAE,UAAU;4BACf,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;wBACzC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;wBAC1C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACnB,OAAO,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,QAAQ,CAAC,iBAAiB,IAAI,SAAS,EAAE,CAAC,CAAC;4BACrF,OAAO,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;4BAC/E,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;gCACnC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;gCACzC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;gCAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;gCACvC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC;gCAC/C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;4BACvC,CAAC;wBACH,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;wBAC1D,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;wBACrD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;oBAC9C,IAAI,CAAC;wBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2EAA2E,EAAE;4BAC9G,GAAG,EAAE,UAAU;4BACf,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;wBACH,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;wBAChD,IAAI,CAAC;4BACH,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;4BAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACjE,OAAO,CAAC,IAAI,CAAC,SAAS,eAAe,CAAC,MAAM,kBAAkB,CAAC,CAAC;gCAChE,KAAK,MAAM,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;oCAC7C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;gCAChE,CAAC;4BACH,CAAC;iCAAM,CAAC;gCACN,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;4BACjD,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;wBAC3E,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;wBAC3C,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;wBACzD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,qDAAqD,CAAC;gBAC/D,CAAC;gBAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;SACF;QAED;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,qGAAqG;YAClH,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,4CAA4C;qBAC1D;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sDAAsD;qBACpE;iBACF;gBACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;aACrB;YACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAW,CAAC;gBACxC,MAAM,QAAQ,GAAI,IAAI,CAAC,OAAO,CAAY,IAAI,6EAA6E,CAAC;gBAE5H,IAAI,CAAC;oBACH,0CAA0C;oBAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBACvD,MAAM,OAAO,GAAa,CAAC,yBAAyB,MAAM,KAAK,CAAC,CAAC;oBAEjE,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,yBAAyB;wBACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBACpC,IAAI,KAAK,CAAC,IAAI,CAAC;4BAAE,SAAS;wBAE1B,IAAI,CAAC;4BACH,MAAM,SAAS,CAAC,aAAa,MAAM,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;4BAClE,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;wBACxC,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;wBACnD,CAAC;oBACH,CAAC;oBAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;gBACzF,CAAC;YACH,CAAC;SACF;QAED;YACE,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,6EAA6E;YAC1F,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,GAAG,EAAE;wBACH,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,0BAA0B;qBACxC;iBACF;gBACD,QAAQ,EAAE,CAAC,KAAK,CAAC;aAClB;YACD,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;gBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAW,CAAC;gBAElC,IAAI,CAAC;oBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,oBAAoB,GAAG,iBAAiB,EAAE;wBAC3E,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;oBAEH,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;oBACrC,MAAM,QAAQ,GAAa,CAAC,6BAA6B,GAAG,KAAK,CAAC,CAAC;oBAEnE,6BAA6B;oBAC7B,MAAM,eAAe,GAAG;wBACtB,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,EAAE;wBAC3F,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACzF,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACvF,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;wBACzE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE;wBACxE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE;wBACtE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE;qBAC7E,CAAC;oBAEF,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,eAAe,EAAE,CAAC;wBACxD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC5B,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACN,MAAM,IAAI,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;4BAC9E,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,cAAc,QAAQ,YAAY,CAAC,CAAC;wBACnE,CAAC;oBACH,CAAC;oBAED,gCAAgC;oBAChC,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;oBAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;wBAChC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;wBACpD,QAAQ,CAAC,IAAI,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;oBAC3F,CAAC;oBACD,IAAI,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;wBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;wBACxD,QAAQ,CAAC,IAAI,CAAC,6BAA6B,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAC;oBAC3F,CAAC;oBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;gBAC5F,CAAC;YACH,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -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"}