erosolar-cli 1.7.356 → 1.7.358

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 +41 -7
  67. package/dist/shell/interactiveShell.d.ts.map +1 -1
  68. package/dist/shell/interactiveShell.js +399 -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 +250 -125
  78. package/dist/shell/terminalInput.d.ts.map +1 -1
  79. package/dist/shell/terminalInput.js +1061 -612
  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 +137 -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 +200 -49
  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 +148 -274
  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,273 +0,0 @@
1
- /**
2
- * Hooks System - Event-driven automation for tool execution
3
- *
4
- * Implements a Claude Code-style hooks system that runs shell commands
5
- * in response to tool execution events:
6
- *
7
- * - beforeToolExecution: Runs before any tool starts
8
- * - afterToolExecution: Runs after any tool completes
9
- * - beforeFileEdit: Runs before a file is modified
10
- * - afterFileEdit: Runs after a file is modified
11
- * - beforeBashCommand: Runs before a bash command executes
12
- * - afterBashCommand: Runs after a bash command completes
13
- *
14
- * Hooks are configured in EROSOLAR.md or settings.json
15
- */
16
- import { exec } from 'node:child_process';
17
- import { existsSync, readFileSync } from 'node:fs';
18
- import { join } from 'node:path';
19
- import { homedir } from 'node:os';
20
- import { promisify } from 'node:util';
21
- const execAsync = promisify(exec);
22
- const DEFAULT_HOOK_TIMEOUT = 30000; // 30 seconds
23
- /**
24
- * Load hooks from EROSOLAR.md or settings.json
25
- */
26
- export function loadHooks(workingDir) {
27
- const configs = loadHooksConfigs(workingDir);
28
- return configs.flatMap((c) => c.hooks);
29
- }
30
- function loadHooksConfigs(workingDir) {
31
- const configs = [];
32
- // 1. User-level hooks from ~/.erosolar/hooks.json
33
- const userHooksPath = join(homedir(), '.erosolar', 'hooks.json');
34
- if (existsSync(userHooksPath)) {
35
- const hooks = tryLoadHooksJson(userHooksPath);
36
- if (hooks.length > 0) {
37
- configs.push({ hooks, source: userHooksPath });
38
- }
39
- }
40
- // 2. Project-level hooks from .erosolar/hooks.json
41
- const projectHooksPath = join(workingDir, '.erosolar', 'hooks.json');
42
- if (existsSync(projectHooksPath)) {
43
- const hooks = tryLoadHooksJson(projectHooksPath);
44
- if (hooks.length > 0) {
45
- configs.push({ hooks, source: projectHooksPath });
46
- }
47
- }
48
- // 3. Parse hooks from EROSOLAR.md YAML frontmatter
49
- const memoryPaths = [
50
- join(workingDir, 'EROSOLAR.md'),
51
- join(workingDir, '.erosolar', 'EROSOLAR.md'),
52
- ];
53
- for (const memoryPath of memoryPaths) {
54
- if (existsSync(memoryPath)) {
55
- const hooks = tryParseHooksFromMarkdown(memoryPath);
56
- if (hooks.length > 0) {
57
- configs.push({ hooks, source: memoryPath });
58
- }
59
- }
60
- }
61
- return configs;
62
- }
63
- function tryLoadHooksJson(filePath) {
64
- try {
65
- const content = readFileSync(filePath, 'utf-8');
66
- const parsed = JSON.parse(content);
67
- if (Array.isArray(parsed)) {
68
- return parsed.filter(isValidHook);
69
- }
70
- if (parsed.hooks && Array.isArray(parsed.hooks)) {
71
- return parsed.hooks.filter(isValidHook);
72
- }
73
- return [];
74
- }
75
- catch {
76
- return [];
77
- }
78
- }
79
- function tryParseHooksFromMarkdown(filePath) {
80
- try {
81
- const content = readFileSync(filePath, 'utf-8');
82
- // Look for hooks in YAML-like format within the markdown
83
- const hooksMatch = content.match(/```(?:yaml|yml)?\nhooks:\s*\n([\s\S]*?)```/);
84
- if (!hooksMatch) {
85
- return [];
86
- }
87
- // Simple YAML-like parsing for hooks
88
- const hooksYaml = hooksMatch[1] ?? '';
89
- const hooks = [];
90
- let currentHook = null;
91
- let inThenBlock = false;
92
- const thenCommands = [];
93
- for (const line of hooksYaml.split('\n')) {
94
- const trimmed = line.trim();
95
- if (trimmed.startsWith('- when:')) {
96
- // Save previous hook
97
- if (currentHook && currentHook.when) {
98
- if (thenCommands.length > 0) {
99
- currentHook.then = [...thenCommands];
100
- }
101
- if (currentHook.then && currentHook.then.length > 0) {
102
- hooks.push(currentHook);
103
- }
104
- }
105
- // Start new hook
106
- const whenValue = trimmed.replace('- when:', '').trim().replace(/['"]/g, '');
107
- currentHook = { when: whenValue };
108
- thenCommands.length = 0;
109
- inThenBlock = false;
110
- }
111
- else if (trimmed.startsWith('if:') && currentHook) {
112
- currentHook.if = trimmed.replace('if:', '').trim().replace(/['"]/g, '');
113
- }
114
- else if (trimmed.startsWith('then:')) {
115
- inThenBlock = true;
116
- }
117
- else if (inThenBlock && trimmed.startsWith('- ')) {
118
- const cmd = trimmed.slice(2).replace(/['"]/g, '');
119
- thenCommands.push(cmd);
120
- }
121
- else if (trimmed.startsWith('timeout:') && currentHook) {
122
- const timeout = parseInt(trimmed.replace('timeout:', '').trim(), 10);
123
- if (!isNaN(timeout)) {
124
- currentHook.timeout = timeout;
125
- }
126
- }
127
- }
128
- // Save last hook
129
- if (currentHook && currentHook.when) {
130
- if (thenCommands.length > 0) {
131
- currentHook.then = [...thenCommands];
132
- }
133
- if (currentHook.then && currentHook.then.length > 0) {
134
- hooks.push(currentHook);
135
- }
136
- }
137
- return hooks;
138
- }
139
- catch {
140
- return [];
141
- }
142
- }
143
- function isValidHook(hook) {
144
- if (!hook || typeof hook !== 'object') {
145
- return false;
146
- }
147
- const h = hook;
148
- const when = h['when'];
149
- const then = h['then'];
150
- return (typeof when === 'string' &&
151
- Array.isArray(then) &&
152
- then.length > 0 &&
153
- then.every((cmd) => typeof cmd === 'string'));
154
- }
155
- /**
156
- * Match a condition against context
157
- */
158
- function matchCondition(condition, context) {
159
- if (!condition) {
160
- return true; // No condition means always match
161
- }
162
- // Match tool name
163
- if (context.tool && context.tool.toLowerCase().includes(condition.toLowerCase())) {
164
- return true;
165
- }
166
- // Match file pattern (simple glob)
167
- if (context.file) {
168
- if (condition.includes('*')) {
169
- const regex = new RegExp('^' + condition.replace(/\./g, '\\.').replace(/\*\*/g, '.*').replace(/\*/g, '[^/]*') + '$');
170
- return regex.test(context.file);
171
- }
172
- return context.file.includes(condition);
173
- }
174
- // Match command pattern
175
- if (context.command && context.command.includes(condition)) {
176
- return true;
177
- }
178
- return false;
179
- }
180
- /**
181
- * Execute a hook's commands
182
- */
183
- async function executeHookCommands(hook, context) {
184
- const output = [];
185
- const errors = [];
186
- let abort = false;
187
- const timeout = hook.timeout ?? DEFAULT_HOOK_TIMEOUT;
188
- for (const command of hook.then) {
189
- // Handle special commands
190
- if (command.toLowerCase() === 'abort') {
191
- abort = true;
192
- continue;
193
- }
194
- if (command.toLowerCase().startsWith('message:')) {
195
- output.push(command.slice(8).trim());
196
- continue;
197
- }
198
- // Execute shell command
199
- try {
200
- const controller = new AbortController();
201
- const timeoutId = setTimeout(() => controller.abort(), timeout);
202
- const { stdout, stderr } = await execAsync(command, {
203
- cwd: context.workingDir,
204
- timeout,
205
- signal: controller.signal,
206
- env: {
207
- ...process.env,
208
- EROSOLAR_TOOL: context.tool ?? '',
209
- EROSOLAR_FILE: context.file ?? '',
210
- EROSOLAR_COMMAND: context.command ?? '',
211
- },
212
- });
213
- clearTimeout(timeoutId);
214
- if (stdout.trim()) {
215
- output.push(stdout.trim());
216
- }
217
- if (stderr.trim()) {
218
- errors.push(stderr.trim());
219
- }
220
- }
221
- catch (error) {
222
- const errMsg = error instanceof Error ? error.message : String(error);
223
- errors.push(`Hook command failed: ${command}\n${errMsg}`);
224
- }
225
- }
226
- return { output, errors, abort };
227
- }
228
- /**
229
- * Run hooks for a specific trigger
230
- */
231
- export async function runHooks(trigger, context, hooks) {
232
- const allHooks = hooks ?? loadHooks(context.workingDir);
233
- const matchingHooks = allHooks.filter((hook) => hook.when === trigger && matchCondition(hook.if, context));
234
- if (matchingHooks.length === 0) {
235
- return { triggered: false, output: [], errors: [], abort: false };
236
- }
237
- const result = {
238
- triggered: true,
239
- output: [],
240
- errors: [],
241
- abort: false,
242
- };
243
- for (const hook of matchingHooks) {
244
- const { output, errors, abort } = await executeHookCommands(hook, context);
245
- result.output.push(...output);
246
- result.errors.push(...errors);
247
- if (abort) {
248
- result.abort = true;
249
- break; // Stop processing if abort is requested
250
- }
251
- }
252
- return result;
253
- }
254
- /**
255
- * Create a hooks runner bound to a specific working directory
256
- */
257
- export function createHooksRunner(workingDir) {
258
- let cachedHooks = null;
259
- const getHooks = () => {
260
- if (cachedHooks === null) {
261
- cachedHooks = loadHooks(workingDir);
262
- }
263
- return cachedHooks;
264
- };
265
- return {
266
- runBefore: (trigger, context) => runHooks(trigger, { ...context, workingDir }, getHooks()),
267
- runAfter: (trigger, context) => runHooks(trigger, { ...context, workingDir }, getHooks()),
268
- reload: () => {
269
- cachedHooks = null;
270
- },
271
- };
272
- }
273
- //# sourceMappingURL=hooksSystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooksSystem.js","sourceRoot":"","sources":["../../src/core/hooksSystem.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Memory System - Hierarchical persistent memory for AI context
3
- *
4
- * Implements a Claude Code-style memory system that loads persistent context
5
- * from markdown files at multiple levels:
6
- *
7
- * 1. Enterprise Policy: /etc/erosolar/EROSOLAR.md (Linux), managed settings
8
- * 2. User Memory: ~/.erosolar/EROSOLAR.md
9
- * 3. Project Memory: ./EROSOLAR.md or ./.erosolar/EROSOLAR.md
10
- *
11
- * Supports @imports for including external files recursively (max 5 levels).
12
- */
13
- interface MemorySource {
14
- level: 'enterprise' | 'user' | 'project' | 'local';
15
- path: string;
16
- content: string;
17
- }
18
- export interface LoadedMemory {
19
- sources: MemorySource[];
20
- combinedContent: string;
21
- importedPaths: string[];
22
- }
23
- /**
24
- * Load all memory from the hierarchy
25
- */
26
- export declare function loadMemory(workingDir: string): LoadedMemory;
27
- /**
28
- * Get memory content formatted for system prompt injection
29
- */
30
- export declare function getMemoryForPrompt(workingDir: string): string;
31
- /**
32
- * List all memory file paths and their status
33
- */
34
- export declare function listMemoryPaths(workingDir: string): Array<{
35
- level: string;
36
- path: string;
37
- exists: boolean;
38
- }>;
39
- /**
40
- * Get the default path for creating a new project memory file
41
- */
42
- export declare function getDefaultProjectMemoryPath(workingDir: string): string;
43
- /**
44
- * Get the user memory path for editing
45
- */
46
- export declare function getUserMemoryEditPath(): string;
47
- export {};
48
- //# sourceMappingURL=memorySystem.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memorySystem.d.ts","sourceRoot":"","sources":["../../src/core/memorySystem.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAUH,UAAU,YAAY;IACpB,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAmKD;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CA6D3D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAc7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC,CAmCD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}
@@ -1,271 +0,0 @@
1
- /**
2
- * Memory System - Hierarchical persistent memory for AI context
3
- *
4
- * Implements a Claude Code-style memory system that loads persistent context
5
- * from markdown files at multiple levels:
6
- *
7
- * 1. Enterprise Policy: /etc/erosolar/EROSOLAR.md (Linux), managed settings
8
- * 2. User Memory: ~/.erosolar/EROSOLAR.md
9
- * 3. Project Memory: ./EROSOLAR.md or ./.erosolar/EROSOLAR.md
10
- *
11
- * Supports @imports for including external files recursively (max 5 levels).
12
- */
13
- import { existsSync, readFileSync } from 'node:fs';
14
- import { dirname, isAbsolute, join, resolve } from 'node:path';
15
- import { homedir, platform } from 'node:os';
16
- const MAX_IMPORT_DEPTH = 5;
17
- const MEMORY_FILE_NAMES = ['EROSOLAR.md', 'CLAUDE.md'];
18
- const DATA_DIR_NAME = '.erosolar';
19
- /**
20
- * Get the path to the enterprise policy memory file
21
- */
22
- function getEnterprisePolicyPath() {
23
- const plat = platform();
24
- if (plat === 'darwin') {
25
- return '/Library/Application Support/Erosolar/EROSOLAR.md';
26
- }
27
- if (plat === 'linux') {
28
- return '/etc/erosolar/EROSOLAR.md';
29
- }
30
- if (plat === 'win32') {
31
- const programData = process.env['PROGRAMDATA'] || 'C:\\ProgramData';
32
- return join(programData, 'Erosolar', 'EROSOLAR.md');
33
- }
34
- return null;
35
- }
36
- /**
37
- * Get the path to the user memory file
38
- */
39
- function getUserMemoryPath() {
40
- return join(homedir(), DATA_DIR_NAME, 'EROSOLAR.md');
41
- }
42
- /**
43
- * Find project memory file in the workspace
44
- */
45
- function findProjectMemoryPath(workingDir) {
46
- // Check root level first
47
- for (const name of MEMORY_FILE_NAMES) {
48
- const rootPath = join(workingDir, name);
49
- if (existsSync(rootPath)) {
50
- return rootPath;
51
- }
52
- }
53
- // Check .erosolar directory
54
- for (const name of MEMORY_FILE_NAMES) {
55
- const nestedPath = join(workingDir, DATA_DIR_NAME, name);
56
- if (existsSync(nestedPath)) {
57
- return nestedPath;
58
- }
59
- }
60
- // Check .claude directory for compatibility
61
- for (const name of MEMORY_FILE_NAMES) {
62
- const claudePath = join(workingDir, '.claude', name);
63
- if (existsSync(claudePath)) {
64
- return claudePath;
65
- }
66
- }
67
- return null;
68
- }
69
- /**
70
- * Parse @imports from a memory file content
71
- */
72
- function parseImports(content) {
73
- const imports = [];
74
- const lines = content.split('\n');
75
- for (const line of lines) {
76
- const trimmed = line.trim();
77
- // Match @path/to/file.md or @~/path/to/file.md
78
- if (trimmed.startsWith('@') && !trimmed.startsWith('@{')) {
79
- const importPath = trimmed.slice(1).trim();
80
- if (importPath) {
81
- imports.push(importPath);
82
- }
83
- }
84
- }
85
- return imports;
86
- }
87
- /**
88
- * Remove @import lines from content (they're processed, not displayed)
89
- */
90
- function removeImportLines(content) {
91
- return content
92
- .split('\n')
93
- .filter((line) => {
94
- const trimmed = line.trim();
95
- return !trimmed.startsWith('@') || trimmed.startsWith('@{');
96
- })
97
- .join('\n')
98
- .trim();
99
- }
100
- /**
101
- * Resolve an import path relative to the source file
102
- */
103
- function resolveImportPath(importPath, sourceDir) {
104
- // Handle ~ for home directory
105
- if (importPath.startsWith('~/') || importPath.startsWith('~\\')) {
106
- return join(homedir(), importPath.slice(2));
107
- }
108
- // Handle absolute paths
109
- if (isAbsolute(importPath)) {
110
- return importPath;
111
- }
112
- // Relative to source file directory
113
- return resolve(sourceDir, importPath);
114
- }
115
- /**
116
- * Load a memory file and process its imports recursively
117
- */
118
- function loadMemoryFileWithImports(filePath, depth, visitedPaths, importedPaths) {
119
- if (depth > MAX_IMPORT_DEPTH) {
120
- return `<!-- Import depth exceeded (max ${MAX_IMPORT_DEPTH}) for: ${filePath} -->`;
121
- }
122
- const normalizedPath = resolve(filePath);
123
- if (visitedPaths.has(normalizedPath)) {
124
- return `<!-- Circular import detected: ${filePath} -->`;
125
- }
126
- if (!existsSync(filePath)) {
127
- return `<!-- Import not found: ${filePath} -->`;
128
- }
129
- visitedPaths.add(normalizedPath);
130
- importedPaths.push(normalizedPath);
131
- let content;
132
- try {
133
- content = readFileSync(filePath, 'utf-8');
134
- }
135
- catch (error) {
136
- return `<!-- Failed to read: ${filePath} -->`;
137
- }
138
- const sourceDir = dirname(normalizedPath);
139
- const imports = parseImports(content);
140
- // Process imports and replace with their content
141
- let processedContent = removeImportLines(content);
142
- for (const importPath of imports) {
143
- const resolvedPath = resolveImportPath(importPath, sourceDir);
144
- const importedContent = loadMemoryFileWithImports(resolvedPath, depth + 1, visitedPaths, importedPaths);
145
- processedContent += '\n\n' + importedContent;
146
- }
147
- return processedContent.trim();
148
- }
149
- /**
150
- * Load all memory from the hierarchy
151
- */
152
- export function loadMemory(workingDir) {
153
- const sources = [];
154
- const allImportedPaths = [];
155
- const visitedPaths = new Set();
156
- // 1. Enterprise policy (highest priority, but loaded first so it can be overridden)
157
- const enterprisePath = getEnterprisePolicyPath();
158
- if (enterprisePath && existsSync(enterprisePath)) {
159
- const content = loadMemoryFileWithImports(enterprisePath, 0, visitedPaths, allImportedPaths);
160
- if (content.trim()) {
161
- sources.push({
162
- level: 'enterprise',
163
- path: enterprisePath,
164
- content,
165
- });
166
- }
167
- }
168
- // 2. User memory
169
- const userPath = getUserMemoryPath();
170
- if (existsSync(userPath)) {
171
- const content = loadMemoryFileWithImports(userPath, 0, visitedPaths, allImportedPaths);
172
- if (content.trim()) {
173
- sources.push({
174
- level: 'user',
175
- path: userPath,
176
- content,
177
- });
178
- }
179
- }
180
- // 3. Project memory
181
- const projectPath = findProjectMemoryPath(workingDir);
182
- if (projectPath) {
183
- const content = loadMemoryFileWithImports(projectPath, 0, visitedPaths, allImportedPaths);
184
- if (content.trim()) {
185
- sources.push({
186
- level: 'project',
187
- path: projectPath,
188
- content,
189
- });
190
- }
191
- }
192
- // Combine all memory with headers
193
- const sections = [];
194
- for (const source of sources) {
195
- const levelLabel = source.level === 'enterprise'
196
- ? 'Enterprise Policy'
197
- : source.level === 'user'
198
- ? 'User Guidelines'
199
- : 'Project Guidelines';
200
- sections.push(`## ${levelLabel}\n\n${source.content}`);
201
- }
202
- return {
203
- sources,
204
- combinedContent: sections.join('\n\n---\n\n'),
205
- importedPaths: allImportedPaths,
206
- };
207
- }
208
- /**
209
- * Get memory content formatted for system prompt injection
210
- */
211
- export function getMemoryForPrompt(workingDir) {
212
- const memory = loadMemory(workingDir);
213
- if (!memory.combinedContent.trim()) {
214
- return '';
215
- }
216
- return `
217
- <persistent-memory>
218
- The following persistent context has been loaded from memory files.
219
- Follow these guidelines when working in this workspace.
220
-
221
- ${memory.combinedContent}
222
- </persistent-memory>
223
- `;
224
- }
225
- /**
226
- * List all memory file paths and their status
227
- */
228
- export function listMemoryPaths(workingDir) {
229
- const paths = [];
230
- const enterprisePath = getEnterprisePolicyPath();
231
- if (enterprisePath) {
232
- paths.push({
233
- level: 'enterprise',
234
- path: enterprisePath,
235
- exists: existsSync(enterprisePath),
236
- });
237
- }
238
- const userPath = getUserMemoryPath();
239
- paths.push({
240
- level: 'user',
241
- path: userPath,
242
- exists: existsSync(userPath),
243
- });
244
- const projectMemoryLocations = [
245
- join(workingDir, 'EROSOLAR.md'),
246
- join(workingDir, 'CLAUDE.md'),
247
- join(workingDir, DATA_DIR_NAME, 'EROSOLAR.md'),
248
- join(workingDir, '.claude', 'CLAUDE.md'),
249
- ];
250
- for (const path of projectMemoryLocations) {
251
- paths.push({
252
- level: 'project',
253
- path,
254
- exists: existsSync(path),
255
- });
256
- }
257
- return paths;
258
- }
259
- /**
260
- * Get the default path for creating a new project memory file
261
- */
262
- export function getDefaultProjectMemoryPath(workingDir) {
263
- return join(workingDir, 'EROSOLAR.md');
264
- }
265
- /**
266
- * Get the user memory path for editing
267
- */
268
- export function getUserMemoryEditPath() {
269
- return getUserMemoryPath();
270
- }
271
- //# sourceMappingURL=memorySystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memorySystem.js","sourceRoot":"","sources":["../../src/core/memorySystem.ts"],"names":[],"mappings":"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"}