@su-record/vibe 3.0.0 → 3.1.0

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 (341) hide show
  1. package/hooks/scripts/__tests__/.vibe/command-log.txt +3 -78
  2. package/hooks/scripts/__tests__/.vibe/memories/memories.db +0 -0
  3. package/hooks/scripts/__tests__/.vibe/memories/memories.db-shm +0 -0
  4. package/hooks/scripts/__tests__/.vibe/memories/memories.db-wal +0 -0
  5. package/hooks/scripts/__tests__/clone-behaviors.test.js +64 -0
  6. package/hooks/scripts/__tests__/clone-merge-responsive.test.js +106 -0
  7. package/hooks/scripts/clone-extract.js +242 -28
  8. package/hooks/scripts/clone-merge-responsive.js +184 -0
  9. package/hooks/scripts/clone-spec.js +33 -8
  10. package/hooks/scripts/clone-validate.js +15 -9
  11. package/package.json +5 -2
  12. package/skills/clone/SKILL.md +132 -55
  13. package/skills/vibe.clone/SKILL.md +39 -19
  14. package/dist/cli/llm/gemini-commands.d.ts +0 -25
  15. package/dist/cli/llm/gemini-commands.d.ts.map +0 -1
  16. package/dist/cli/llm/gemini-commands.js +0 -143
  17. package/dist/cli/llm/gemini-commands.js.map +0 -1
  18. package/dist/cli/postinstall/codex-agents.d.ts +0 -24
  19. package/dist/cli/postinstall/codex-agents.d.ts.map +0 -1
  20. package/dist/cli/postinstall/codex-agents.js +0 -114
  21. package/dist/cli/postinstall/codex-agents.js.map +0 -1
  22. package/dist/cli/postinstall/codex-instruction.d.ts +0 -10
  23. package/dist/cli/postinstall/codex-instruction.d.ts.map +0 -1
  24. package/dist/cli/postinstall/codex-instruction.js +0 -56
  25. package/dist/cli/postinstall/codex-instruction.js.map +0 -1
  26. package/dist/cli/postinstall/gemini-agents.d.ts +0 -12
  27. package/dist/cli/postinstall/gemini-agents.d.ts.map +0 -1
  28. package/dist/cli/postinstall/gemini-agents.js +0 -80
  29. package/dist/cli/postinstall/gemini-agents.js.map +0 -1
  30. package/dist/cli/postinstall/gemini-instruction.d.ts +0 -10
  31. package/dist/cli/postinstall/gemini-instruction.d.ts.map +0 -1
  32. package/dist/cli/postinstall/gemini-instruction.js +0 -59
  33. package/dist/cli/postinstall/gemini-instruction.js.map +0 -1
  34. package/dist/infra/lib/ContextCompressor.d.ts +0 -104
  35. package/dist/infra/lib/ContextCompressor.d.ts.map +0 -1
  36. package/dist/infra/lib/ContextCompressor.js +0 -297
  37. package/dist/infra/lib/ContextCompressor.js.map +0 -1
  38. package/dist/infra/lib/ContextCompressor.test.d.ts +0 -2
  39. package/dist/infra/lib/ContextCompressor.test.d.ts.map +0 -1
  40. package/dist/infra/lib/ContextCompressor.test.js +0 -25
  41. package/dist/infra/lib/ContextCompressor.test.js.map +0 -1
  42. package/dist/infra/lib/ProgressTracker.d.ts +0 -73
  43. package/dist/infra/lib/ProgressTracker.d.ts.map +0 -1
  44. package/dist/infra/lib/ProgressTracker.js +0 -267
  45. package/dist/infra/lib/ProgressTracker.js.map +0 -1
  46. package/dist/infra/lib/TokenBudgetTracker.d.ts +0 -68
  47. package/dist/infra/lib/TokenBudgetTracker.d.ts.map +0 -1
  48. package/dist/infra/lib/TokenBudgetTracker.js +0 -191
  49. package/dist/infra/lib/TokenBudgetTracker.js.map +0 -1
  50. package/dist/infra/lib/autonomy/AuditStore.d.ts +0 -63
  51. package/dist/infra/lib/autonomy/AuditStore.d.ts.map +0 -1
  52. package/dist/infra/lib/autonomy/AuditStore.js +0 -185
  53. package/dist/infra/lib/autonomy/AuditStore.js.map +0 -1
  54. package/dist/infra/lib/autonomy/AutonomyConfig.d.ts +0 -84
  55. package/dist/infra/lib/autonomy/AutonomyConfig.d.ts.map +0 -1
  56. package/dist/infra/lib/autonomy/AutonomyConfig.js +0 -49
  57. package/dist/infra/lib/autonomy/AutonomyConfig.js.map +0 -1
  58. package/dist/infra/lib/autonomy/AutonomyOrchestrator.d.ts +0 -78
  59. package/dist/infra/lib/autonomy/AutonomyOrchestrator.d.ts.map +0 -1
  60. package/dist/infra/lib/autonomy/AutonomyOrchestrator.js +0 -246
  61. package/dist/infra/lib/autonomy/AutonomyOrchestrator.js.map +0 -1
  62. package/dist/infra/lib/autonomy/BackgroundMonitor.d.ts +0 -36
  63. package/dist/infra/lib/autonomy/BackgroundMonitor.d.ts.map +0 -1
  64. package/dist/infra/lib/autonomy/BackgroundMonitor.js +0 -138
  65. package/dist/infra/lib/autonomy/BackgroundMonitor.js.map +0 -1
  66. package/dist/infra/lib/autonomy/CollaborationProtocol.d.ts +0 -56
  67. package/dist/infra/lib/autonomy/CollaborationProtocol.d.ts.map +0 -1
  68. package/dist/infra/lib/autonomy/CollaborationProtocol.js +0 -122
  69. package/dist/infra/lib/autonomy/CollaborationProtocol.js.map +0 -1
  70. package/dist/infra/lib/autonomy/ConfirmationManager.d.ts +0 -42
  71. package/dist/infra/lib/autonomy/ConfirmationManager.d.ts.map +0 -1
  72. package/dist/infra/lib/autonomy/ConfirmationManager.js +0 -200
  73. package/dist/infra/lib/autonomy/ConfirmationManager.js.map +0 -1
  74. package/dist/infra/lib/autonomy/ConfirmationStore.d.ts +0 -55
  75. package/dist/infra/lib/autonomy/ConfirmationStore.d.ts.map +0 -1
  76. package/dist/infra/lib/autonomy/ConfirmationStore.js +0 -130
  77. package/dist/infra/lib/autonomy/ConfirmationStore.js.map +0 -1
  78. package/dist/infra/lib/autonomy/EventBus.d.ts +0 -20
  79. package/dist/infra/lib/autonomy/EventBus.d.ts.map +0 -1
  80. package/dist/infra/lib/autonomy/EventBus.js +0 -119
  81. package/dist/infra/lib/autonomy/EventBus.js.map +0 -1
  82. package/dist/infra/lib/autonomy/EventOutbox.d.ts +0 -32
  83. package/dist/infra/lib/autonomy/EventOutbox.d.ts.map +0 -1
  84. package/dist/infra/lib/autonomy/EventOutbox.js +0 -152
  85. package/dist/infra/lib/autonomy/EventOutbox.js.map +0 -1
  86. package/dist/infra/lib/autonomy/NotificationDispatcher.d.ts +0 -24
  87. package/dist/infra/lib/autonomy/NotificationDispatcher.d.ts.map +0 -1
  88. package/dist/infra/lib/autonomy/NotificationDispatcher.js +0 -112
  89. package/dist/infra/lib/autonomy/NotificationDispatcher.js.map +0 -1
  90. package/dist/infra/lib/autonomy/PolicyEngine.d.ts +0 -76
  91. package/dist/infra/lib/autonomy/PolicyEngine.d.ts.map +0 -1
  92. package/dist/infra/lib/autonomy/PolicyEngine.js +0 -208
  93. package/dist/infra/lib/autonomy/PolicyEngine.js.map +0 -1
  94. package/dist/infra/lib/autonomy/ProactiveAnalyzer.d.ts +0 -61
  95. package/dist/infra/lib/autonomy/ProactiveAnalyzer.d.ts.map +0 -1
  96. package/dist/infra/lib/autonomy/ProactiveAnalyzer.js +0 -236
  97. package/dist/infra/lib/autonomy/ProactiveAnalyzer.js.map +0 -1
  98. package/dist/infra/lib/autonomy/RiskClassifier.d.ts +0 -35
  99. package/dist/infra/lib/autonomy/RiskClassifier.d.ts.map +0 -1
  100. package/dist/infra/lib/autonomy/RiskClassifier.js +0 -147
  101. package/dist/infra/lib/autonomy/RiskClassifier.js.map +0 -1
  102. package/dist/infra/lib/autonomy/SecuritySentinel.d.ts +0 -51
  103. package/dist/infra/lib/autonomy/SecuritySentinel.d.ts.map +0 -1
  104. package/dist/infra/lib/autonomy/SecuritySentinel.js +0 -162
  105. package/dist/infra/lib/autonomy/SecuritySentinel.js.map +0 -1
  106. package/dist/infra/lib/autonomy/SuggestionStore.d.ts +0 -54
  107. package/dist/infra/lib/autonomy/SuggestionStore.d.ts.map +0 -1
  108. package/dist/infra/lib/autonomy/SuggestionStore.js +0 -144
  109. package/dist/infra/lib/autonomy/SuggestionStore.js.map +0 -1
  110. package/dist/infra/lib/autonomy/TaskDecomposer.d.ts +0 -38
  111. package/dist/infra/lib/autonomy/TaskDecomposer.d.ts.map +0 -1
  112. package/dist/infra/lib/autonomy/TaskDecomposer.js +0 -175
  113. package/dist/infra/lib/autonomy/TaskDecomposer.js.map +0 -1
  114. package/dist/infra/lib/autonomy/__tests__/audit-store.test.d.ts +0 -2
  115. package/dist/infra/lib/autonomy/__tests__/audit-store.test.d.ts.map +0 -1
  116. package/dist/infra/lib/autonomy/__tests__/audit-store.test.js +0 -198
  117. package/dist/infra/lib/autonomy/__tests__/audit-store.test.js.map +0 -1
  118. package/dist/infra/lib/autonomy/__tests__/event-bus.test.d.ts +0 -2
  119. package/dist/infra/lib/autonomy/__tests__/event-bus.test.d.ts.map +0 -1
  120. package/dist/infra/lib/autonomy/__tests__/event-bus.test.js +0 -225
  121. package/dist/infra/lib/autonomy/__tests__/event-bus.test.js.map +0 -1
  122. package/dist/infra/lib/autonomy/__tests__/event-core.test.d.ts +0 -2
  123. package/dist/infra/lib/autonomy/__tests__/event-core.test.d.ts.map +0 -1
  124. package/dist/infra/lib/autonomy/__tests__/event-core.test.js +0 -194
  125. package/dist/infra/lib/autonomy/__tests__/event-core.test.js.map +0 -1
  126. package/dist/infra/lib/autonomy/__tests__/governance.test.d.ts +0 -2
  127. package/dist/infra/lib/autonomy/__tests__/governance.test.d.ts.map +0 -1
  128. package/dist/infra/lib/autonomy/__tests__/governance.test.js +0 -540
  129. package/dist/infra/lib/autonomy/__tests__/governance.test.js.map +0 -1
  130. package/dist/infra/lib/autonomy/__tests__/integration.test.d.ts +0 -2
  131. package/dist/infra/lib/autonomy/__tests__/integration.test.d.ts.map +0 -1
  132. package/dist/infra/lib/autonomy/__tests__/integration.test.js +0 -480
  133. package/dist/infra/lib/autonomy/__tests__/integration.test.js.map +0 -1
  134. package/dist/infra/lib/autonomy/__tests__/proactive.test.d.ts +0 -2
  135. package/dist/infra/lib/autonomy/__tests__/proactive.test.d.ts.map +0 -1
  136. package/dist/infra/lib/autonomy/__tests__/proactive.test.js +0 -410
  137. package/dist/infra/lib/autonomy/__tests__/proactive.test.js.map +0 -1
  138. package/dist/infra/lib/autonomy/__tests__/sentinel.test.d.ts +0 -2
  139. package/dist/infra/lib/autonomy/__tests__/sentinel.test.d.ts.map +0 -1
  140. package/dist/infra/lib/autonomy/__tests__/sentinel.test.js +0 -486
  141. package/dist/infra/lib/autonomy/__tests__/sentinel.test.js.map +0 -1
  142. package/dist/infra/lib/autonomy/index.d.ts +0 -18
  143. package/dist/infra/lib/autonomy/index.d.ts.map +0 -1
  144. package/dist/infra/lib/autonomy/index.js +0 -22
  145. package/dist/infra/lib/autonomy/index.js.map +0 -1
  146. package/dist/infra/lib/autonomy/schemas.d.ts +0 -317
  147. package/dist/infra/lib/autonomy/schemas.d.ts.map +0 -1
  148. package/dist/infra/lib/autonomy/schemas.js +0 -90
  149. package/dist/infra/lib/autonomy/schemas.js.map +0 -1
  150. package/dist/infra/lib/claude/index.d.ts +0 -5
  151. package/dist/infra/lib/claude/index.d.ts.map +0 -1
  152. package/dist/infra/lib/claude/index.js +0 -5
  153. package/dist/infra/lib/claude/index.js.map +0 -1
  154. package/dist/infra/lib/claude/storage.d.ts +0 -12
  155. package/dist/infra/lib/claude/storage.d.ts.map +0 -1
  156. package/dist/infra/lib/claude/storage.js +0 -54
  157. package/dist/infra/lib/claude/storage.js.map +0 -1
  158. package/dist/infra/lib/gemini/auth.d.ts +0 -18
  159. package/dist/infra/lib/gemini/auth.d.ts.map +0 -1
  160. package/dist/infra/lib/gemini/auth.js +0 -32
  161. package/dist/infra/lib/gemini/auth.js.map +0 -1
  162. package/dist/infra/lib/gemini/capabilities.d.ts +0 -28
  163. package/dist/infra/lib/gemini/capabilities.d.ts.map +0 -1
  164. package/dist/infra/lib/gemini/capabilities.js +0 -178
  165. package/dist/infra/lib/gemini/capabilities.js.map +0 -1
  166. package/dist/infra/lib/gemini/chat.d.ts +0 -35
  167. package/dist/infra/lib/gemini/chat.d.ts.map +0 -1
  168. package/dist/infra/lib/gemini/chat.js +0 -161
  169. package/dist/infra/lib/gemini/chat.js.map +0 -1
  170. package/dist/infra/lib/gemini/completion.d.ts +0 -12
  171. package/dist/infra/lib/gemini/completion.d.ts.map +0 -1
  172. package/dist/infra/lib/gemini/completion.js +0 -13
  173. package/dist/infra/lib/gemini/completion.js.map +0 -1
  174. package/dist/infra/lib/gemini/constants.d.ts +0 -8
  175. package/dist/infra/lib/gemini/constants.d.ts.map +0 -1
  176. package/dist/infra/lib/gemini/constants.js +0 -11
  177. package/dist/infra/lib/gemini/constants.js.map +0 -1
  178. package/dist/infra/lib/gemini/index.d.ts +0 -13
  179. package/dist/infra/lib/gemini/index.d.ts.map +0 -1
  180. package/dist/infra/lib/gemini/index.js +0 -12
  181. package/dist/infra/lib/gemini/index.js.map +0 -1
  182. package/dist/infra/lib/gemini/models.d.ts +0 -11
  183. package/dist/infra/lib/gemini/models.d.ts.map +0 -1
  184. package/dist/infra/lib/gemini/models.js +0 -38
  185. package/dist/infra/lib/gemini/models.js.map +0 -1
  186. package/dist/infra/lib/gemini/orchestration.d.ts +0 -33
  187. package/dist/infra/lib/gemini/orchestration.d.ts.map +0 -1
  188. package/dist/infra/lib/gemini/orchestration.js +0 -62
  189. package/dist/infra/lib/gemini/orchestration.js.map +0 -1
  190. package/dist/infra/lib/gemini/types.d.ts +0 -115
  191. package/dist/infra/lib/gemini/types.d.ts.map +0 -1
  192. package/dist/infra/lib/gemini/types.js +0 -5
  193. package/dist/infra/lib/gemini/types.js.map +0 -1
  194. package/dist/infra/orchestrator/AgentAnnouncer.d.ts +0 -64
  195. package/dist/infra/orchestrator/AgentAnnouncer.d.ts.map +0 -1
  196. package/dist/infra/orchestrator/AgentAnnouncer.js +0 -127
  197. package/dist/infra/orchestrator/AgentAnnouncer.js.map +0 -1
  198. package/dist/infra/orchestrator/AgentAnnouncer.test.d.ts +0 -5
  199. package/dist/infra/orchestrator/AgentAnnouncer.test.d.ts.map +0 -1
  200. package/dist/infra/orchestrator/AgentAnnouncer.test.js +0 -119
  201. package/dist/infra/orchestrator/AgentAnnouncer.test.js.map +0 -1
  202. package/dist/infra/orchestrator/AgentExecutor.d.ts +0 -22
  203. package/dist/infra/orchestrator/AgentExecutor.d.ts.map +0 -1
  204. package/dist/infra/orchestrator/AgentExecutor.js +0 -272
  205. package/dist/infra/orchestrator/AgentExecutor.js.map +0 -1
  206. package/dist/infra/orchestrator/AgentManager.d.ts +0 -72
  207. package/dist/infra/orchestrator/AgentManager.d.ts.map +0 -1
  208. package/dist/infra/orchestrator/AgentManager.js +0 -183
  209. package/dist/infra/orchestrator/AgentManager.js.map +0 -1
  210. package/dist/infra/orchestrator/AgentManifestCache.d.ts +0 -54
  211. package/dist/infra/orchestrator/AgentManifestCache.d.ts.map +0 -1
  212. package/dist/infra/orchestrator/AgentManifestCache.js +0 -191
  213. package/dist/infra/orchestrator/AgentManifestCache.js.map +0 -1
  214. package/dist/infra/orchestrator/AgentRegistry.d.ts +0 -76
  215. package/dist/infra/orchestrator/AgentRegistry.d.ts.map +0 -1
  216. package/dist/infra/orchestrator/AgentRegistry.js +0 -217
  217. package/dist/infra/orchestrator/AgentRegistry.js.map +0 -1
  218. package/dist/infra/orchestrator/AgentRegistry.test.d.ts +0 -5
  219. package/dist/infra/orchestrator/AgentRegistry.test.d.ts.map +0 -1
  220. package/dist/infra/orchestrator/AgentRegistry.test.js +0 -122
  221. package/dist/infra/orchestrator/AgentRegistry.test.js.map +0 -1
  222. package/dist/infra/orchestrator/BackgroundManager.d.ts +0 -128
  223. package/dist/infra/orchestrator/BackgroundManager.d.ts.map +0 -1
  224. package/dist/infra/orchestrator/BackgroundManager.js +0 -620
  225. package/dist/infra/orchestrator/BackgroundManager.js.map +0 -1
  226. package/dist/infra/orchestrator/BackgroundManager.test.d.ts +0 -6
  227. package/dist/infra/orchestrator/BackgroundManager.test.d.ts.map +0 -1
  228. package/dist/infra/orchestrator/BackgroundManager.test.js +0 -162
  229. package/dist/infra/orchestrator/BackgroundManager.test.js.map +0 -1
  230. package/dist/infra/orchestrator/CheckpointManager.d.ts +0 -54
  231. package/dist/infra/orchestrator/CheckpointManager.d.ts.map +0 -1
  232. package/dist/infra/orchestrator/CheckpointManager.js +0 -121
  233. package/dist/infra/orchestrator/CheckpointManager.js.map +0 -1
  234. package/dist/infra/orchestrator/CodexAgentRuntime.d.ts +0 -12
  235. package/dist/infra/orchestrator/CodexAgentRuntime.d.ts.map +0 -1
  236. package/dist/infra/orchestrator/CodexAgentRuntime.js +0 -94
  237. package/dist/infra/orchestrator/CodexAgentRuntime.js.map +0 -1
  238. package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts +0 -2
  239. package/dist/infra/orchestrator/CodexAgentRuntime.test.d.ts.map +0 -1
  240. package/dist/infra/orchestrator/CodexAgentRuntime.test.js +0 -37
  241. package/dist/infra/orchestrator/CodexAgentRuntime.test.js.map +0 -1
  242. package/dist/infra/orchestrator/LLMCluster.d.ts +0 -82
  243. package/dist/infra/orchestrator/LLMCluster.d.ts.map +0 -1
  244. package/dist/infra/orchestrator/LLMCluster.js +0 -146
  245. package/dist/infra/orchestrator/LLMCluster.js.map +0 -1
  246. package/dist/infra/orchestrator/MultiLlmResearch.d.ts +0 -31
  247. package/dist/infra/orchestrator/MultiLlmResearch.d.ts.map +0 -1
  248. package/dist/infra/orchestrator/MultiLlmResearch.js +0 -160
  249. package/dist/infra/orchestrator/MultiLlmResearch.js.map +0 -1
  250. package/dist/infra/orchestrator/PhasePipeline.d.ts +0 -122
  251. package/dist/infra/orchestrator/PhasePipeline.d.ts.map +0 -1
  252. package/dist/infra/orchestrator/PhasePipeline.js +0 -385
  253. package/dist/infra/orchestrator/PhasePipeline.js.map +0 -1
  254. package/dist/infra/orchestrator/PhaseResultStore.d.ts +0 -39
  255. package/dist/infra/orchestrator/PhaseResultStore.d.ts.map +0 -1
  256. package/dist/infra/orchestrator/PhaseResultStore.js +0 -151
  257. package/dist/infra/orchestrator/PhaseResultStore.js.map +0 -1
  258. package/dist/infra/orchestrator/SessionStore.d.ts +0 -40
  259. package/dist/infra/orchestrator/SessionStore.d.ts.map +0 -1
  260. package/dist/infra/orchestrator/SessionStore.js +0 -116
  261. package/dist/infra/orchestrator/SessionStore.js.map +0 -1
  262. package/dist/infra/orchestrator/SmartRouter.d.ts +0 -90
  263. package/dist/infra/orchestrator/SmartRouter.d.ts.map +0 -1
  264. package/dist/infra/orchestrator/SmartRouter.js +0 -277
  265. package/dist/infra/orchestrator/SmartRouter.js.map +0 -1
  266. package/dist/infra/orchestrator/SmartRouter.test.d.ts +0 -5
  267. package/dist/infra/orchestrator/SmartRouter.test.d.ts.map +0 -1
  268. package/dist/infra/orchestrator/SmartRouter.test.js +0 -484
  269. package/dist/infra/orchestrator/SmartRouter.test.js.map +0 -1
  270. package/dist/infra/orchestrator/SwarmOrchestrator.d.ts +0 -143
  271. package/dist/infra/orchestrator/SwarmOrchestrator.d.ts.map +0 -1
  272. package/dist/infra/orchestrator/SwarmOrchestrator.js +0 -378
  273. package/dist/infra/orchestrator/SwarmOrchestrator.js.map +0 -1
  274. package/dist/infra/orchestrator/SwarmOrchestrator.test.d.ts +0 -5
  275. package/dist/infra/orchestrator/SwarmOrchestrator.test.d.ts.map +0 -1
  276. package/dist/infra/orchestrator/SwarmOrchestrator.test.js +0 -95
  277. package/dist/infra/orchestrator/SwarmOrchestrator.test.js.map +0 -1
  278. package/dist/infra/orchestrator/agentDiscovery.d.ts +0 -26
  279. package/dist/infra/orchestrator/agentDiscovery.d.ts.map +0 -1
  280. package/dist/infra/orchestrator/agentDiscovery.js +0 -175
  281. package/dist/infra/orchestrator/agentDiscovery.js.map +0 -1
  282. package/dist/infra/orchestrator/backgroundAgent.d.ts +0 -9
  283. package/dist/infra/orchestrator/backgroundAgent.d.ts.map +0 -1
  284. package/dist/infra/orchestrator/backgroundAgent.js +0 -10
  285. package/dist/infra/orchestrator/backgroundAgent.js.map +0 -1
  286. package/dist/infra/orchestrator/index.d.ts +0 -207
  287. package/dist/infra/orchestrator/index.d.ts.map +0 -1
  288. package/dist/infra/orchestrator/index.js +0 -362
  289. package/dist/infra/orchestrator/index.js.map +0 -1
  290. package/dist/infra/orchestrator/orchestrator.d.ts +0 -60
  291. package/dist/infra/orchestrator/orchestrator.d.ts.map +0 -1
  292. package/dist/infra/orchestrator/orchestrator.js +0 -214
  293. package/dist/infra/orchestrator/orchestrator.js.map +0 -1
  294. package/dist/infra/orchestrator/parallelResearch.d.ts +0 -27
  295. package/dist/infra/orchestrator/parallelResearch.d.ts.map +0 -1
  296. package/dist/infra/orchestrator/parallelResearch.js +0 -285
  297. package/dist/infra/orchestrator/parallelResearch.js.map +0 -1
  298. package/dist/infra/orchestrator/types.d.ts +0 -205
  299. package/dist/infra/orchestrator/types.d.ts.map +0 -1
  300. package/dist/infra/orchestrator/types.js +0 -87
  301. package/dist/infra/orchestrator/types.js.map +0 -1
  302. package/dist/infra/orchestrator/types.test.d.ts +0 -2
  303. package/dist/infra/orchestrator/types.test.d.ts.map +0 -1
  304. package/dist/infra/orchestrator/types.test.js +0 -57
  305. package/dist/infra/orchestrator/types.test.js.map +0 -1
  306. package/dist/tools/semantic/analyzeDependencyGraph.d.ts +0 -12
  307. package/dist/tools/semantic/analyzeDependencyGraph.d.ts.map +0 -1
  308. package/dist/tools/semantic/analyzeDependencyGraph.js +0 -359
  309. package/dist/tools/semantic/analyzeDependencyGraph.js.map +0 -1
  310. package/dist/tools/semantic/astGrep.d.ts +0 -25
  311. package/dist/tools/semantic/astGrep.d.ts.map +0 -1
  312. package/dist/tools/semantic/astGrep.js +0 -324
  313. package/dist/tools/semantic/astGrep.js.map +0 -1
  314. package/dist/tools/semantic/astGrep.test.d.ts +0 -2
  315. package/dist/tools/semantic/astGrep.test.d.ts.map +0 -1
  316. package/dist/tools/semantic/astGrep.test.js +0 -74
  317. package/dist/tools/semantic/astGrep.test.js.map +0 -1
  318. package/dist/tools/semantic/findReferences.d.ts +0 -9
  319. package/dist/tools/semantic/findReferences.d.ts.map +0 -1
  320. package/dist/tools/semantic/findReferences.js +0 -200
  321. package/dist/tools/semantic/findReferences.js.map +0 -1
  322. package/dist/tools/semantic/findSymbol.d.ts +0 -8
  323. package/dist/tools/semantic/findSymbol.d.ts.map +0 -1
  324. package/dist/tools/semantic/findSymbol.js +0 -204
  325. package/dist/tools/semantic/findSymbol.js.map +0 -1
  326. package/dist/tools/semantic/index.d.ts +0 -9
  327. package/dist/tools/semantic/index.d.ts.map +0 -1
  328. package/dist/tools/semantic/index.js +0 -11
  329. package/dist/tools/semantic/index.js.map +0 -1
  330. package/dist/tools/semantic/lsp.d.ts +0 -68
  331. package/dist/tools/semantic/lsp.d.ts.map +0 -1
  332. package/dist/tools/semantic/lsp.js +0 -561
  333. package/dist/tools/semantic/lsp.js.map +0 -1
  334. package/dist/tools/spec/e2eTestGenerator.d.ts +0 -61
  335. package/dist/tools/spec/e2eTestGenerator.d.ts.map +0 -1
  336. package/dist/tools/spec/e2eTestGenerator.js +0 -255
  337. package/dist/tools/spec/e2eTestGenerator.js.map +0 -1
  338. package/dist/tools/spec/specVersioning.d.ts +0 -76
  339. package/dist/tools/spec/specVersioning.d.ts.map +0 -1
  340. package/dist/tools/spec/specVersioning.js +0 -236
  341. package/dist/tools/spec/specVersioning.js.map +0 -1
@@ -1,236 +0,0 @@
1
- const DEBOUNCE_MS = 500;
2
- // ── SecurityScanner ────────────────────────────
3
- const HARDCODED_SECRET_RE = /\b(api[_-]?key|secret|password|token)\s*[:=]\s*["'][^"']{8,}["']/gi;
4
- const DYNAMIC_SQL_RE = /\b(query|exec|execute|prepare)\s*\(\s*[`'"].*\$\{/gi;
5
- const XSS_PATTERNS_RE = /\b(innerHTML|dangerouslySetInnerHTML)\s*[=:]/gi;
6
- export class SecurityScanner {
7
- name = 'SecurityScanner';
8
- shouldRun(trigger) {
9
- return trigger === 'file_changed' || trigger === 'manual';
10
- }
11
- async analyze(context) {
12
- if (!context.fileContent)
13
- return [];
14
- const suggestions = [];
15
- if (HARDCODED_SECRET_RE.test(context.fileContent)) {
16
- HARDCODED_SECRET_RE.lastIndex = 0;
17
- suggestions.push({
18
- type: 'security',
19
- title: `Hardcoded secret detected in ${context.filePath ?? 'unknown'}`,
20
- description: 'Hardcoded secrets should be moved to environment variables or secret management.',
21
- priority: 1,
22
- evidence: { filePath: context.filePath, pattern: 'hardcoded_secret' },
23
- suggestedAction: 'Move secrets to .env file or secret manager',
24
- riskLevel: 'HIGH',
25
- });
26
- }
27
- if (DYNAMIC_SQL_RE.test(context.fileContent)) {
28
- DYNAMIC_SQL_RE.lastIndex = 0;
29
- suggestions.push({
30
- type: 'security',
31
- title: `Dynamic SQL construction in ${context.filePath ?? 'unknown'}`,
32
- description: 'Dynamic SQL construction is vulnerable to SQL injection. Use parameterized queries.',
33
- priority: 1,
34
- evidence: { filePath: context.filePath, pattern: 'dynamic_sql' },
35
- suggestedAction: 'Use parameterized queries instead',
36
- riskLevel: 'HIGH',
37
- });
38
- }
39
- if (XSS_PATTERNS_RE.test(context.fileContent)) {
40
- XSS_PATTERNS_RE.lastIndex = 0;
41
- suggestions.push({
42
- type: 'security',
43
- title: `XSS vulnerability pattern in ${context.filePath ?? 'unknown'}`,
44
- description: 'Using innerHTML or dangerouslySetInnerHTML can lead to XSS vulnerabilities.',
45
- priority: 2,
46
- evidence: { filePath: context.filePath, pattern: 'xss' },
47
- suggestedAction: 'Use safe rendering methods and sanitize user input',
48
- riskLevel: 'MEDIUM',
49
- });
50
- }
51
- return suggestions;
52
- }
53
- }
54
- // ── PerformanceDetector ────────────────────────
55
- export class PerformanceDetector {
56
- name = 'PerformanceDetector';
57
- shouldRun(trigger) {
58
- return trigger === 'session_start' || trigger === 'manual';
59
- }
60
- async analyze(context) {
61
- if (!context.fileContent)
62
- return [];
63
- const suggestions = [];
64
- // Detect N+1 query pattern (loop + query)
65
- if (/for\s*\(.*\)\s*\{[^}]*\.(query|find|get|select)\s*\(/gs.test(context.fileContent)) {
66
- suggestions.push({
67
- type: 'performance',
68
- title: `Potential N+1 query in ${context.filePath ?? 'unknown'}`,
69
- description: 'Database query inside a loop may cause N+1 performance issues.',
70
- priority: 2,
71
- evidence: { filePath: context.filePath, pattern: 'n_plus_1' },
72
- suggestedAction: 'Use batch queries or joins instead',
73
- });
74
- }
75
- return suggestions;
76
- }
77
- }
78
- // ── QualityChecker ──────────────────────────────
79
- const TODO_RE = /\/\/\s*TODO\b/g;
80
- const HIGH_COMPLEXITY_RE = /(?:if|else|for|while|switch|catch|&&|\|\|)/g;
81
- export class QualityChecker {
82
- name = 'QualityChecker';
83
- shouldRun(trigger) {
84
- return trigger === 'file_changed' || trigger === 'build_complete' || trigger === 'manual';
85
- }
86
- async analyze(context) {
87
- if (!context.fileContent)
88
- return [];
89
- const suggestions = [];
90
- // Check for abandoned TODOs
91
- const todoMatches = context.fileContent.match(TODO_RE);
92
- if (todoMatches && todoMatches.length > 3) {
93
- suggestions.push({
94
- type: 'quality',
95
- title: `${todoMatches.length} TODOs in ${context.filePath ?? 'unknown'}`,
96
- description: `Found ${todoMatches.length} TODO comments that may need attention.`,
97
- priority: 3,
98
- evidence: { filePath: context.filePath, todoCount: todoMatches.length },
99
- suggestedAction: 'Review and resolve TODO items',
100
- });
101
- }
102
- // Check complexity (rough heuristic)
103
- const lines = context.fileContent.split('\n');
104
- const complexityMatches = context.fileContent.match(HIGH_COMPLEXITY_RE);
105
- if (complexityMatches && lines.length > 0) {
106
- const density = complexityMatches.length / lines.length;
107
- if (density > 0.3) {
108
- suggestions.push({
109
- type: 'quality',
110
- title: `High complexity in ${context.filePath ?? 'unknown'}`,
111
- description: `Complexity density ${(density * 100).toFixed(0)}% exceeds threshold.`,
112
- priority: 2,
113
- evidence: { filePath: context.filePath, complexityDensity: density },
114
- suggestedAction: 'Consider refactoring to reduce complexity',
115
- });
116
- }
117
- }
118
- return suggestions;
119
- }
120
- }
121
- // ── DependencyMonitor ───────────────────────────
122
- export class DependencyMonitor {
123
- name = 'DependencyMonitor';
124
- shouldRun(trigger) {
125
- return trigger === 'scheduled' || trigger === 'manual';
126
- }
127
- async analyze(context) {
128
- if (!context.fileContent)
129
- return [];
130
- // Parse package.json for basic checks
131
- try {
132
- const pkg = JSON.parse(context.fileContent);
133
- const suggestions = [];
134
- const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
135
- // Check for wildcard versions
136
- for (const [name, version] of Object.entries(allDeps)) {
137
- if (version === '*' || version === 'latest') {
138
- suggestions.push({
139
- type: 'dependency',
140
- title: `Unpinned dependency: ${name}`,
141
- description: `${name} uses '${version}' version which is not pinned.`,
142
- priority: 2,
143
- evidence: { package: name, version },
144
- suggestedAction: `Pin ${name} to a specific version`,
145
- });
146
- }
147
- }
148
- return suggestions;
149
- }
150
- catch {
151
- return [];
152
- }
153
- }
154
- }
155
- // ── ProactiveAnalyzer (Orchestrator) ────────────
156
- export class ProactiveAnalyzer {
157
- modules;
158
- store;
159
- eventBus;
160
- debounceTimers = new Map();
161
- constructor(deps) {
162
- this.store = deps.store;
163
- this.eventBus = deps.eventBus;
164
- this.modules = deps.modules ?? [
165
- new SecurityScanner(),
166
- new PerformanceDetector(),
167
- new QualityChecker(),
168
- new DependencyMonitor(),
169
- ];
170
- }
171
- async analyze(context) {
172
- if (context.filePath && context.trigger === 'file_changed') {
173
- return this.analyzeDebounced(context);
174
- }
175
- return this.runAnalysis(context);
176
- }
177
- getModules() {
178
- return this.modules;
179
- }
180
- clearDebounce() {
181
- for (const timer of this.debounceTimers.values()) {
182
- clearTimeout(timer);
183
- }
184
- this.debounceTimers.clear();
185
- }
186
- analyzeDebounced(context) {
187
- const key = context.filePath;
188
- const existing = this.debounceTimers.get(key);
189
- if (existing)
190
- clearTimeout(existing);
191
- return new Promise((resolve) => {
192
- this.debounceTimers.set(key, setTimeout(async () => {
193
- this.debounceTimers.delete(key);
194
- const results = await this.runAnalysis(context);
195
- resolve(results);
196
- }, DEBOUNCE_MS));
197
- });
198
- }
199
- async runAnalysis(context) {
200
- const allSuggestions = [];
201
- for (const mod of this.modules) {
202
- if (!mod.shouldRun(context.trigger))
203
- continue;
204
- try {
205
- const suggestions = await mod.analyze(context);
206
- for (const s of suggestions) {
207
- this.store.create({
208
- ...s,
209
- sourceModule: mod.name,
210
- });
211
- allSuggestions.push(s);
212
- }
213
- }
214
- catch {
215
- // Module failure should not break analysis
216
- }
217
- }
218
- if (allSuggestions.length > 0) {
219
- this.emitSuggestionCreated(allSuggestions.length, context.trigger);
220
- }
221
- return allSuggestions;
222
- }
223
- emitSuggestionCreated(count, trigger) {
224
- try {
225
- this.eventBus.emit('suggestion_created', {
226
- eventType: 'suggestion_created',
227
- payload: { count, trigger },
228
- sourceAgentId: 'proactive-analyzer',
229
- });
230
- }
231
- catch {
232
- // Non-critical
233
- }
234
- }
235
- }
236
- //# sourceMappingURL=ProactiveAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProactiveAnalyzer.js","sourceRoot":"","sources":["../../../../src/infra/lib/autonomy/ProactiveAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { AgentActionEvent, RiskLevel } from './schemas.js';
2
- export interface RiskAssessment {
3
- riskLevel: RiskLevel;
4
- score: number;
5
- factors: string[];
6
- reasoning: string;
7
- blocked?: boolean;
8
- }
9
- export interface ClassificationContext {
10
- recentDeleteCount?: number;
11
- }
12
- export interface CustomRiskRule {
13
- actionType: string;
14
- targetPattern?: string;
15
- riskLevel: RiskLevel;
16
- condition?: string;
17
- }
18
- export declare class RiskClassifier {
19
- private readonly customRules;
20
- constructor(customRules?: CustomRiskRule[]);
21
- classify(action: AgentActionEvent, context?: ClassificationContext): RiskAssessment;
22
- private sanitizeAction;
23
- private evaluateCustomRules;
24
- private evaluateDefaultRules;
25
- private classifyFileWrite;
26
- private classifyFileDelete;
27
- private classifyBashExec;
28
- private classifyGitPush;
29
- private classifySkillGenerate;
30
- private classifyConfigModify;
31
- private classifyDependencyInstall;
32
- private classifyExternalApiCall;
33
- private makeAssessment;
34
- }
35
- //# sourceMappingURL=RiskClassifier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RiskClassifier.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/autonomy/RiskClassifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAwBhE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;gBAEnC,WAAW,CAAC,EAAE,cAAc,EAAE;IAW1C,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc;IAOnF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,cAAc;CAOvB"}
@@ -1,147 +0,0 @@
1
- import { z } from 'zod';
2
- const CONTROL_CHAR_RE = /[\u0000-\u001F]/g;
3
- const SECURITY_FILE_PATTERNS = [
4
- /[/\\]auth[/\\]/i,
5
- /[/\\]security[/\\]/i,
6
- /[/\\]\.env/i,
7
- /[/\\]secrets/i,
8
- ];
9
- const SENTINEL_PROTECTED_RE = /^src[\\/]lib[\\/]autonomy[\\/]/;
10
- const DANGEROUS_BASH_RE = /\b(rm\s+-rf|kill\s+-9|drop\s+table|truncate|shutdown|reboot|mkfs|dd\s+if=)\b/i;
11
- const AUTH_CREDENTIAL_RE = /\b(api[_-]?key|secret|token|password|auth|bearer)\b/i;
12
- const SCORE_DEFAULTS = {
13
- LOW: 15,
14
- MEDIUM: 50,
15
- HIGH: 80,
16
- };
17
- const CustomRiskRuleSchema = z.object({
18
- actionType: z.string().min(1),
19
- targetPattern: z.string().optional(),
20
- riskLevel: z.enum(['LOW', 'MEDIUM', 'HIGH']),
21
- condition: z.string().optional(),
22
- });
23
- export class RiskClassifier {
24
- customRules;
25
- constructor(customRules) {
26
- this.customRules = (customRules ?? []).filter((rule) => {
27
- try {
28
- CustomRiskRuleSchema.parse(rule);
29
- return true;
30
- }
31
- catch {
32
- return false;
33
- }
34
- });
35
- }
36
- classify(action, context) {
37
- const sanitized = this.sanitizeAction(action);
38
- const customResult = this.evaluateCustomRules(sanitized);
39
- if (customResult)
40
- return customResult;
41
- return this.evaluateDefaultRules(sanitized, context);
42
- }
43
- sanitizeAction(action) {
44
- return {
45
- ...action,
46
- agentId: action.agentId.replace(CONTROL_CHAR_RE, ''),
47
- target: action.target.replace(CONTROL_CHAR_RE, ''),
48
- };
49
- }
50
- evaluateCustomRules(action) {
51
- for (const rule of this.customRules) {
52
- if (rule.actionType !== action.actionType)
53
- continue;
54
- if (rule.targetPattern) {
55
- try {
56
- if (!new RegExp(rule.targetPattern, 'i').test(action.target))
57
- continue;
58
- }
59
- catch {
60
- continue;
61
- }
62
- }
63
- return this.makeAssessment(rule.riskLevel, [`Custom rule matched: ${rule.actionType}`], `Custom rule override for ${rule.actionType}`);
64
- }
65
- return null;
66
- }
67
- evaluateDefaultRules(action, context) {
68
- const handlers = {
69
- file_write: () => this.classifyFileWrite(action),
70
- file_delete: () => this.classifyFileDelete(action, context),
71
- bash_exec: () => this.classifyBashExec(action),
72
- git_push: () => this.classifyGitPush(action),
73
- skill_generate: () => this.classifySkillGenerate(action),
74
- config_modify: () => this.classifyConfigModify(action),
75
- dependency_install: () => this.classifyDependencyInstall(),
76
- external_api_call: () => this.classifyExternalApiCall(action),
77
- };
78
- const handler = handlers[action.actionType];
79
- if (handler)
80
- return handler();
81
- return this.makeAssessment('LOW', [], `Unknown action type: ${action.actionType}`);
82
- }
83
- classifyFileWrite(action) {
84
- const normalized = action.target.replace(/\\/g, '/').replace(/^\.\//, '');
85
- if (SENTINEL_PROTECTED_RE.test(normalized)) {
86
- return {
87
- riskLevel: 'HIGH',
88
- score: 100,
89
- factors: ['Sentinel protected file modification attempted'],
90
- reasoning: 'Modifying files in src/lib/autonomy/ is blocked',
91
- blocked: true,
92
- };
93
- }
94
- for (const pattern of SECURITY_FILE_PATTERNS) {
95
- if (pattern.test(action.target)) {
96
- return this.makeAssessment('HIGH', [`Security-sensitive file: ${action.target}`], 'Security file modification requires elevated risk level');
97
- }
98
- }
99
- return this.makeAssessment('LOW', [], 'Standard file write operation');
100
- }
101
- classifyFileDelete(action, context) {
102
- if (context?.recentDeleteCount !== undefined && context.recentDeleteCount >= 5) {
103
- return this.makeAssessment('HIGH', [`Mass delete detected: ${context.recentDeleteCount} files in last 60s`], 'Mass file deletion detected');
104
- }
105
- return this.makeAssessment('MEDIUM', [], 'File deletion operation');
106
- }
107
- classifyBashExec(action) {
108
- if (DANGEROUS_BASH_RE.test(action.target)) {
109
- return this.makeAssessment('HIGH', [`Dangerous command detected in: ${action.target}`], 'Bash command contains dangerous patterns');
110
- }
111
- return this.makeAssessment('MEDIUM', [], 'Standard bash execution');
112
- }
113
- classifyGitPush(action) {
114
- const paramsStr = JSON.stringify(action.params ?? {});
115
- const combined = `${action.target} ${paramsStr}`;
116
- if (/--force\b/.test(combined) || /["']?force["']?\s*:\s*true/.test(paramsStr)) {
117
- return this.makeAssessment('HIGH', ['Force push detected'], 'Git force push requires elevated risk level');
118
- }
119
- return this.makeAssessment('HIGH', [], 'Git push operation');
120
- }
121
- classifySkillGenerate(action) {
122
- if (/\brule\b/i.test(action.target)) {
123
- return this.makeAssessment('MEDIUM', ['Rule generation detected'], 'Skill generation involving rules');
124
- }
125
- return this.makeAssessment('LOW', [], 'Standard skill generation');
126
- }
127
- classifyConfigModify(action) {
128
- if (/\bsentinel\b/i.test(action.target)) {
129
- return this.makeAssessment('HIGH', ['Sentinel configuration modification'], 'Modifying sentinel configuration requires elevated risk level');
130
- }
131
- return this.makeAssessment('MEDIUM', [], 'Configuration modification');
132
- }
133
- classifyDependencyInstall() {
134
- return this.makeAssessment('MEDIUM', [], 'Dependency installation');
135
- }
136
- classifyExternalApiCall(action) {
137
- const paramsStr = JSON.stringify(action.params ?? {});
138
- if (AUTH_CREDENTIAL_RE.test(paramsStr)) {
139
- return this.makeAssessment('HIGH', ['Authentication credentials detected in API call'], 'External API call with authentication');
140
- }
141
- return this.makeAssessment('LOW', [], 'Standard external API call');
142
- }
143
- makeAssessment(riskLevel, factors, reasoning) {
144
- return { riskLevel, score: SCORE_DEFAULTS[riskLevel], factors, reasoning };
145
- }
146
- }
147
- //# sourceMappingURL=RiskClassifier.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RiskClassifier.js","sourceRoot":"","sources":["../../../../src/infra/lib/autonomy/RiskClassifier.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- import type Database from 'better-sqlite3';
2
- import type { AgentActionEvent, RiskLevel } from './schemas.js';
3
- import type { EventBus } from './EventBus.js';
4
- import type { AuditStore } from './AuditStore.js';
5
- import { RiskClassifier } from './RiskClassifier.js';
6
- import type { CustomRiskRule } from './RiskClassifier.js';
7
- import { PolicyEngine } from './PolicyEngine.js';
8
- import type { PolicyDecision } from './PolicyEngine.js';
9
- export interface InterceptResult {
10
- allowed: boolean;
11
- riskLevel: RiskLevel;
12
- policyDecision: PolicyDecision;
13
- auditId: string;
14
- }
15
- interface StorageProvider {
16
- getDatabase(): Database.Database;
17
- }
18
- export interface SentinelDeps {
19
- storage: StorageProvider;
20
- eventBus: EventBus;
21
- auditStore: AuditStore;
22
- projectRoot?: string;
23
- customRules?: CustomRiskRule[];
24
- }
25
- export declare class SecuritySentinel {
26
- private static instance;
27
- private readonly classifier;
28
- private readonly policyEngine;
29
- private readonly eventBus;
30
- private readonly auditStore;
31
- private readonly db;
32
- private readonly projectRoot;
33
- private readonly recentDeleteStmt;
34
- private constructor();
35
- static getInstance(deps: SentinelDeps): SecuritySentinel;
36
- static resetInstance(): void;
37
- intercept(action: AgentActionEvent): InterceptResult;
38
- isImmutable(): boolean;
39
- getSentinelFiles(): ReadonlyArray<string>;
40
- getClassifier(): RiskClassifier;
41
- getPolicyEngine(): PolicyEngine;
42
- private normalizeAction;
43
- private normalizePath;
44
- private buildContext;
45
- private blockedDecision;
46
- private emitPolicyCheck;
47
- private recordAudit;
48
- }
49
- export declare function isSentinelProtectedPath(target: string): boolean;
50
- export {};
51
- //# sourceMappingURL=SecuritySentinel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SecuritySentinel.d.ts","sourceRoot":"","sources":["../../../../src/infra/lib/autonomy/SecuritySentinel.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAkB,cAAc,EAAyB,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiBxD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,eAAe;IACvB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAChC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IAExD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IAEtD,OAAO;IAaP,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB;IAOxD,MAAM,CAAC,aAAa,IAAI,IAAI;IAI5B,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe;IAmCpD,WAAW,IAAI,OAAO;IAItB,gBAAgB,IAAI,aAAa,CAAC,MAAM,CAAC;IAIzC,aAAa,IAAI,cAAc;IAI/B,eAAe,IAAI,YAAY;IAI/B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,WAAW;CAsBpB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG/D"}
@@ -1,162 +0,0 @@
1
- import { resolve, relative } from 'path';
2
- import { realpathSync } from 'fs';
3
- import { RiskClassifier } from './RiskClassifier.js';
4
- import { PolicyEngine } from './PolicyEngine.js';
5
- const SENTINEL_PATH_PREFIX = 'src/lib/autonomy/';
6
- const SENTINEL_FILES = [
7
- 'src/lib/autonomy/RiskClassifier.ts',
8
- 'src/lib/autonomy/PolicyEngine.ts',
9
- 'src/lib/autonomy/SecuritySentinel.ts',
10
- 'src/lib/autonomy/EventBus.ts',
11
- 'src/lib/autonomy/AuditStore.ts',
12
- 'src/lib/autonomy/EventOutbox.ts',
13
- 'src/lib/autonomy/schemas.ts',
14
- 'src/lib/autonomy/index.ts',
15
- ];
16
- const RECENT_DELETE_WINDOW_MS = 60_000;
17
- export class SecuritySentinel {
18
- static instance = null;
19
- classifier;
20
- policyEngine;
21
- eventBus;
22
- auditStore;
23
- db;
24
- projectRoot;
25
- recentDeleteStmt;
26
- constructor(deps) {
27
- this.classifier = new RiskClassifier(deps.customRules);
28
- this.policyEngine = new PolicyEngine(deps.storage);
29
- this.eventBus = deps.eventBus;
30
- this.auditStore = deps.auditStore;
31
- this.db = deps.storage.getDatabase();
32
- this.projectRoot = deps.projectRoot ?? process.cwd();
33
- this.recentDeleteStmt = this.db.prepare(`SELECT COUNT(*) as count FROM audit_events
34
- WHERE agentId = ? AND actionType = 'file_delete' AND createdAt >= ?`);
35
- }
36
- static getInstance(deps) {
37
- if (!SecuritySentinel.instance) {
38
- SecuritySentinel.instance = new SecuritySentinel(deps);
39
- }
40
- return SecuritySentinel.instance;
41
- }
42
- static resetInstance() {
43
- SecuritySentinel.instance = null;
44
- }
45
- intercept(action) {
46
- const normalizedAction = this.normalizeAction(action);
47
- // Block paths outside project root
48
- if (normalizedAction.target.startsWith('..')) {
49
- const outsideRisk = {
50
- riskLevel: 'HIGH',
51
- score: 100,
52
- factors: ['Path resolves outside project root'],
53
- reasoning: 'Path traversal outside project root is blocked',
54
- blocked: true,
55
- };
56
- const decision = this.blockedDecision(outsideRisk);
57
- this.emitPolicyCheck(normalizedAction, outsideRisk, decision);
58
- const auditId = this.recordAudit(normalizedAction, outsideRisk, decision);
59
- return { allowed: false, riskLevel: 'HIGH', policyDecision: decision, auditId };
60
- }
61
- const context = this.buildContext(normalizedAction);
62
- const risk = this.classifier.classify(normalizedAction, context);
63
- const policyDecision = risk.blocked
64
- ? this.blockedDecision(risk)
65
- : this.policyEngine.evaluate(normalizedAction, risk);
66
- this.emitPolicyCheck(normalizedAction, risk, policyDecision);
67
- const auditId = this.recordAudit(normalizedAction, risk, policyDecision);
68
- return {
69
- allowed: policyDecision.allowed,
70
- riskLevel: risk.riskLevel,
71
- policyDecision,
72
- auditId,
73
- };
74
- }
75
- isImmutable() {
76
- return true;
77
- }
78
- getSentinelFiles() {
79
- return SENTINEL_FILES;
80
- }
81
- getClassifier() {
82
- return this.classifier;
83
- }
84
- getPolicyEngine() {
85
- return this.policyEngine;
86
- }
87
- normalizeAction(action) {
88
- const normalizedTarget = this.normalizePath(action.target);
89
- return { ...action, target: normalizedTarget };
90
- }
91
- normalizePath(target) {
92
- const resolved = resolve(this.projectRoot, target);
93
- const rel = relative(this.projectRoot, resolved).replace(/\\/g, '/');
94
- if (rel.startsWith('..'))
95
- return rel;
96
- try {
97
- const real = realpathSync(resolved);
98
- const realRel = relative(this.projectRoot, real).replace(/\\/g, '/');
99
- return realRel.startsWith('..') ? realRel : realRel;
100
- }
101
- catch {
102
- return rel;
103
- }
104
- }
105
- buildContext(action) {
106
- if (action.actionType !== 'file_delete')
107
- return undefined;
108
- const cutoff = new Date(Date.now() - RECENT_DELETE_WINDOW_MS).toISOString();
109
- const row = this.recentDeleteStmt.get(action.agentId, cutoff);
110
- return { recentDeleteCount: row.count };
111
- }
112
- blockedDecision(risk) {
113
- return {
114
- allowed: false,
115
- reason: `Sentinel files are protected: ${risk.reasoning}`,
116
- requiredAction: 'block',
117
- matchedPolicies: ['sentinel-immutability'],
118
- };
119
- }
120
- emitPolicyCheck(action, risk, decision) {
121
- try {
122
- this.eventBus.emit('policy_check', {
123
- actionEvent: {
124
- agentId: action.agentId,
125
- actionType: action.actionType,
126
- target: action.target,
127
- params: action.params,
128
- riskLevel: risk.riskLevel,
129
- },
130
- policies: decision.matchedPolicies,
131
- result: decision.allowed ? 'allowed' : (decision.requiredAction === 'confirm' ? 'needs_confirmation' : 'blocked'),
132
- duration: 0,
133
- });
134
- }
135
- catch {
136
- // Policy check event emission failure should not break intercept
137
- }
138
- }
139
- recordAudit(action, risk, decision) {
140
- const outcome = decision.allowed ? 'allowed' : 'blocked';
141
- return this.auditStore.record({
142
- correlationId: action.correlationId ?? `sentinel-${Date.now()}`,
143
- eventType: 'policy_check',
144
- agentId: action.agentId,
145
- actionType: action.actionType,
146
- riskLevel: risk.riskLevel,
147
- payload: {
148
- target: action.target,
149
- riskScore: risk.score,
150
- factors: risk.factors,
151
- matchedPolicies: decision.matchedPolicies,
152
- reason: decision.reason,
153
- },
154
- outcome,
155
- });
156
- }
157
- }
158
- export function isSentinelProtectedPath(target) {
159
- const normalized = target.replace(/\\/g, '/').replace(/^\.\//, '');
160
- return normalized.startsWith(SENTINEL_PATH_PREFIX);
161
- }
162
- //# sourceMappingURL=SecuritySentinel.js.map