@gsep/core 0.8.0 → 1.0.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 (344) hide show
  1. package/README.md +12 -12
  2. package/dist/{PGA.d.ts → GSEP.d.ts} +120 -8
  3. package/dist/GSEP.d.ts.map +1 -0
  4. package/dist/{PGA.js → GSEP.js} +1248 -46
  5. package/dist/GSEP.js.map +1 -0
  6. package/dist/adapters/langchain.d.ts +52 -0
  7. package/dist/adapters/langchain.d.ts.map +1 -0
  8. package/dist/adapters/langchain.js +89 -0
  9. package/dist/adapters/langchain.js.map +1 -0
  10. package/dist/adapters/openclaw-plugin.d.ts +42 -0
  11. package/dist/adapters/openclaw-plugin.d.ts.map +1 -0
  12. package/dist/adapters/openclaw-plugin.js +149 -0
  13. package/dist/adapters/openclaw-plugin.js.map +1 -0
  14. package/dist/adapters/vercel-ai.d.ts +74 -0
  15. package/dist/adapters/vercel-ai.d.ts.map +1 -0
  16. package/dist/adapters/vercel-ai.js +151 -0
  17. package/dist/adapters/vercel-ai.js.map +1 -0
  18. package/dist/advanced-ai/EnhancedSelfModel.js +2 -2
  19. package/dist/advanced-ai/EnhancedSelfModel.js.map +1 -1
  20. package/dist/advanced-ai/ModelRouter.js.map +1 -1
  21. package/dist/auto.d.ts +6 -0
  22. package/dist/auto.d.ts.map +1 -0
  23. package/dist/auto.js +197 -0
  24. package/dist/auto.js.map +1 -0
  25. package/dist/core/CoherenceValidator.d.ts +25 -0
  26. package/dist/core/CoherenceValidator.d.ts.map +1 -0
  27. package/dist/core/CoherenceValidator.js +182 -0
  28. package/dist/core/CoherenceValidator.js.map +1 -0
  29. package/dist/core/ContextMemory.d.ts.map +1 -1
  30. package/dist/core/ContextMemory.js +1 -1
  31. package/dist/core/ContextMemory.js.map +1 -1
  32. package/dist/core/DNAProfile.d.ts +5 -1
  33. package/dist/core/DNAProfile.d.ts.map +1 -1
  34. package/dist/core/DNAProfile.js +14 -1
  35. package/dist/core/DNAProfile.js.map +1 -1
  36. package/dist/core/GSEPIdentitySection.d.ts.map +1 -1
  37. package/dist/core/GSEPIdentitySection.js +12 -3
  38. package/dist/core/GSEPIdentitySection.js.map +1 -1
  39. package/dist/core/GenomeKernel.d.ts.map +1 -1
  40. package/dist/core/GenomeKernel.js +3 -0
  41. package/dist/core/GenomeKernel.js.map +1 -1
  42. package/dist/core/GenomeManager.js +1 -1
  43. package/dist/core/GenomeManager.js.map +1 -1
  44. package/dist/core/ProactiveSuggestions.js +1 -1
  45. package/dist/core/ProactiveSuggestions.js.map +1 -1
  46. package/dist/dashboard/DashboardServer.d.ts +64 -0
  47. package/dist/dashboard/DashboardServer.d.ts.map +1 -0
  48. package/dist/dashboard/DashboardServer.js +409 -0
  49. package/dist/dashboard/DashboardServer.js.map +1 -0
  50. package/dist/dashboard/DashboardToken.d.ts +16 -0
  51. package/dist/dashboard/DashboardToken.d.ts.map +1 -0
  52. package/dist/dashboard/DashboardToken.js +54 -0
  53. package/dist/dashboard/DashboardToken.js.map +1 -0
  54. package/dist/dashboard/dashboard.html +2731 -0
  55. package/dist/dashboard/index.d.ts +3 -0
  56. package/dist/dashboard/index.d.ts.map +1 -0
  57. package/dist/dashboard/index.js +3 -0
  58. package/dist/dashboard/index.js.map +1 -0
  59. package/dist/evaluation/BenchmarkSuites.d.ts +2 -2
  60. package/dist/evaluation/BenchmarkSuites.d.ts.map +1 -1
  61. package/dist/evaluation/BenchmarkSuites.js +6 -6
  62. package/dist/evaluation/BenchmarkSuites.js.map +1 -1
  63. package/dist/evaluation/ConstitutionalGate.d.ts +18 -0
  64. package/dist/evaluation/ConstitutionalGate.d.ts.map +1 -0
  65. package/dist/evaluation/ConstitutionalGate.js +149 -0
  66. package/dist/evaluation/ConstitutionalGate.js.map +1 -0
  67. package/dist/evaluation/Evaluator.d.ts +4 -4
  68. package/dist/evaluation/Evaluator.d.ts.map +1 -1
  69. package/dist/evaluation/Evaluator.js +27 -27
  70. package/dist/evaluation/Evaluator.js.map +1 -1
  71. package/dist/evaluation/EvolutionGuardrails.d.ts +3 -1
  72. package/dist/evaluation/EvolutionGuardrails.d.ts.map +1 -1
  73. package/dist/evaluation/EvolutionGuardrails.js +29 -11
  74. package/dist/evaluation/EvolutionGuardrails.js.map +1 -1
  75. package/dist/evolution/MutationOperator.d.ts +19 -6
  76. package/dist/evolution/MutationOperator.d.ts.map +1 -1
  77. package/dist/evolution/MutationOperator.js +264 -9
  78. package/dist/evolution/MutationOperator.js.map +1 -1
  79. package/dist/evolution/boost/operators/BreakthroughOperator.d.ts +1 -1
  80. package/dist/evolution/boost/operators/BreakthroughOperator.d.ts.map +1 -1
  81. package/dist/evolution/boost/operators/BreakthroughOperator.js.map +1 -1
  82. package/dist/evolution/boost/operators/CrossoverMutationOperator.d.ts +1 -1
  83. package/dist/evolution/boost/operators/CrossoverMutationOperator.d.ts.map +1 -1
  84. package/dist/evolution/boost/operators/CrossoverMutationOperator.js.map +1 -1
  85. package/dist/evolution/boost/operators/PatternExtractionOperator.d.ts +1 -1
  86. package/dist/evolution/boost/operators/PatternExtractionOperator.d.ts.map +1 -1
  87. package/dist/evolution/boost/operators/PatternExtractionOperator.js.map +1 -1
  88. package/dist/evolution/boost/operators/SemanticRestructuringOperator.d.ts +1 -1
  89. package/dist/evolution/boost/operators/SemanticRestructuringOperator.d.ts.map +1 -1
  90. package/dist/evolution/boost/operators/SemanticRestructuringOperator.js.map +1 -1
  91. package/dist/firewall/AnomalyDetector.d.ts +42 -0
  92. package/dist/firewall/AnomalyDetector.d.ts.map +1 -0
  93. package/dist/firewall/AnomalyDetector.js +181 -0
  94. package/dist/firewall/AnomalyDetector.js.map +1 -0
  95. package/dist/firewall/ContentFirewall.d.ts +5 -0
  96. package/dist/firewall/ContentFirewall.d.ts.map +1 -1
  97. package/dist/firewall/ContentFirewall.js +5 -0
  98. package/dist/firewall/ContentFirewall.js.map +1 -1
  99. package/dist/firewall/PurposeLock.d.ts +41 -0
  100. package/dist/firewall/PurposeLock.d.ts.map +1 -0
  101. package/dist/firewall/PurposeLock.js +199 -0
  102. package/dist/firewall/PurposeLock.js.map +1 -0
  103. package/dist/gene-bank/CognitiveGene.d.ts +118 -118
  104. package/dist/gene-bank/{PGAIntegration.d.ts → GSEPIntegration.d.ts} +10 -10
  105. package/dist/gene-bank/GSEPIntegration.d.ts.map +1 -0
  106. package/dist/gene-bank/{PGAIntegration.js → GSEPIntegration.js} +6 -6
  107. package/dist/gene-bank/GSEPIntegration.js.map +1 -0
  108. package/dist/gene-bank/GeneAdopter.d.ts +6 -6
  109. package/dist/gene-bank/GeneAdopter.d.ts.map +1 -1
  110. package/dist/gene-bank/GeneAdopter.js +2 -2
  111. package/dist/gene-bank/GeneAdopter.js.map +1 -1
  112. package/dist/gene-bank/GeneBank.d.ts +13 -9
  113. package/dist/gene-bank/GeneBank.d.ts.map +1 -1
  114. package/dist/gene-bank/GeneBank.js +8 -1
  115. package/dist/gene-bank/GeneBank.js.map +1 -1
  116. package/dist/gene-bank/GeneExtractor.d.ts +7 -7
  117. package/dist/gene-bank/GeneExtractor.d.ts.map +1 -1
  118. package/dist/gene-bank/GeneExtractor.js +1 -1
  119. package/dist/gene-bank/GeneExtractor.js.map +1 -1
  120. package/dist/gene-bank/GeneMatcher.d.ts +1 -1
  121. package/dist/gene-bank/GeneMatcher.d.ts.map +1 -1
  122. package/dist/gene-bank/MarketplaceClient.d.ts +17 -1
  123. package/dist/gene-bank/MarketplaceClient.d.ts.map +1 -1
  124. package/dist/gene-bank/MarketplaceClient.js +106 -35
  125. package/dist/gene-bank/MarketplaceClient.js.map +1 -1
  126. package/dist/gene-bank/MarketplaceMapper.d.ts +7 -0
  127. package/dist/gene-bank/MarketplaceMapper.d.ts.map +1 -0
  128. package/dist/gene-bank/MarketplaceMapper.js +95 -0
  129. package/dist/gene-bank/MarketplaceMapper.js.map +1 -0
  130. package/dist/gene-bank/MarketplaceTypes.d.ts +121 -0
  131. package/dist/gene-bank/MarketplaceTypes.d.ts.map +1 -0
  132. package/dist/gene-bank/MarketplaceTypes.js +2 -0
  133. package/dist/gene-bank/MarketplaceTypes.js.map +1 -0
  134. package/dist/gene-bank/SandboxTester.d.ts +3 -3
  135. package/dist/gene-bank/SandboxTester.d.ts.map +1 -1
  136. package/dist/gene-bank/adapters/InMemoryGeneStorage.d.ts +3 -3
  137. package/dist/gene-bank/adapters/InMemoryGeneStorage.d.ts.map +1 -1
  138. package/dist/gene-bank/adapters/PostgresGeneStorage.d.ts +4 -4
  139. package/dist/gene-bank/adapters/PostgresGeneStorage.d.ts.map +1 -1
  140. package/dist/gene-bank/adapters/PostgresGeneStorage.js.map +1 -1
  141. package/dist/gene-bank/adapters/SQLiteGeneStorage.d.ts +28 -0
  142. package/dist/gene-bank/adapters/SQLiteGeneStorage.d.ts.map +1 -0
  143. package/dist/gene-bank/adapters/SQLiteGeneStorage.js +158 -0
  144. package/dist/gene-bank/adapters/SQLiteGeneStorage.js.map +1 -0
  145. package/dist/gene-bank/index.d.ts +10 -7
  146. package/dist/gene-bank/index.d.ts.map +1 -1
  147. package/dist/gene-bank/index.js +8 -7
  148. package/dist/gene-bank/index.js.map +1 -1
  149. package/dist/immune/BehavioralImmuneSystem.d.ts +6 -0
  150. package/dist/immune/BehavioralImmuneSystem.d.ts.map +1 -1
  151. package/dist/immune/BehavioralImmuneSystem.js +6 -0
  152. package/dist/immune/BehavioralImmuneSystem.js.map +1 -1
  153. package/dist/index.d.ts +44 -9
  154. package/dist/index.d.ts.map +1 -1
  155. package/dist/index.js +22 -4
  156. package/dist/index.js.map +1 -1
  157. package/dist/memory/LayeredMemory.d.ts +1 -1
  158. package/dist/memory/LayeredMemory.d.ts.map +1 -1
  159. package/dist/memory/LayeredMemory.js.map +1 -1
  160. package/dist/middleware/GSEPMiddleware.d.ts +57 -0
  161. package/dist/middleware/GSEPMiddleware.d.ts.map +1 -0
  162. package/dist/middleware/GSEPMiddleware.js +91 -0
  163. package/dist/middleware/GSEPMiddleware.js.map +1 -0
  164. package/dist/middleware/RuntimeDetector.d.ts +10 -0
  165. package/dist/middleware/RuntimeDetector.d.ts.map +1 -0
  166. package/dist/middleware/RuntimeDetector.js +70 -0
  167. package/dist/middleware/RuntimeDetector.js.map +1 -0
  168. package/dist/middleware/ServerlessAdapter.d.ts +23 -0
  169. package/dist/middleware/ServerlessAdapter.d.ts.map +1 -0
  170. package/dist/middleware/ServerlessAdapter.js +77 -0
  171. package/dist/middleware/ServerlessAdapter.js.map +1 -0
  172. package/dist/monitoring/AlertWebhooks.d.ts +17 -0
  173. package/dist/monitoring/AlertWebhooks.d.ts.map +1 -1
  174. package/dist/monitoring/AlertWebhooks.js.map +1 -1
  175. package/dist/monitoring/WeeklyReportGenerator.d.ts +73 -0
  176. package/dist/monitoring/WeeklyReportGenerator.d.ts.map +1 -0
  177. package/dist/monitoring/WeeklyReportGenerator.js +148 -0
  178. package/dist/monitoring/WeeklyReportGenerator.js.map +1 -0
  179. package/dist/rag/RAGEngine.d.ts +1 -1
  180. package/dist/rag/RAGEngine.d.ts.map +1 -1
  181. package/dist/rag/VectorStoreAdapter.d.ts +2 -2
  182. package/dist/rag/VectorStoreAdapter.d.ts.map +1 -1
  183. package/dist/rag/VectorStoreAdapter.js.map +1 -1
  184. package/dist/realtime/EventEmitter.d.ts +110 -17
  185. package/dist/realtime/EventEmitter.d.ts.map +1 -1
  186. package/dist/realtime/EventEmitter.js +3 -4
  187. package/dist/realtime/EventEmitter.js.map +1 -1
  188. package/dist/security/CapabilityBroker.d.ts +41 -0
  189. package/dist/security/CapabilityBroker.d.ts.map +1 -0
  190. package/dist/security/CapabilityBroker.js +125 -0
  191. package/dist/security/CapabilityBroker.js.map +1 -0
  192. package/dist/security/CommandExecutionGuard.d.ts +47 -0
  193. package/dist/security/CommandExecutionGuard.d.ts.map +1 -0
  194. package/dist/security/CommandExecutionGuard.js +175 -0
  195. package/dist/security/CommandExecutionGuard.js.map +1 -0
  196. package/dist/security/ComplianceExporter.d.ts +32 -0
  197. package/dist/security/ComplianceExporter.d.ts.map +1 -0
  198. package/dist/security/ComplianceExporter.js +129 -0
  199. package/dist/security/ComplianceExporter.js.map +1 -0
  200. package/dist/security/DataAccessTracker.d.ts +38 -0
  201. package/dist/security/DataAccessTracker.d.ts.map +1 -0
  202. package/dist/security/DataAccessTracker.js +71 -0
  203. package/dist/security/DataAccessTracker.js.map +1 -0
  204. package/dist/security/DataClassifier.d.ts +14 -0
  205. package/dist/security/DataClassifier.d.ts.map +1 -0
  206. package/dist/security/DataClassifier.js +146 -0
  207. package/dist/security/DataClassifier.js.map +1 -0
  208. package/dist/security/EncryptedConfigStore.d.ts +21 -0
  209. package/dist/security/EncryptedConfigStore.d.ts.map +1 -0
  210. package/dist/security/EncryptedConfigStore.js +119 -0
  211. package/dist/security/EncryptedConfigStore.js.map +1 -0
  212. package/dist/security/EnterprisePolicyEngine.d.ts +90 -0
  213. package/dist/security/EnterprisePolicyEngine.d.ts.map +1 -0
  214. package/dist/security/EnterprisePolicyEngine.js +240 -0
  215. package/dist/security/EnterprisePolicyEngine.js.map +1 -0
  216. package/dist/security/FileSystemBoundary.d.ts +33 -0
  217. package/dist/security/FileSystemBoundary.d.ts.map +1 -0
  218. package/dist/security/FileSystemBoundary.js +94 -0
  219. package/dist/security/FileSystemBoundary.js.map +1 -0
  220. package/dist/security/GDPREngine.d.ts +65 -0
  221. package/dist/security/GDPREngine.d.ts.map +1 -0
  222. package/dist/security/GDPREngine.js +180 -0
  223. package/dist/security/GDPREngine.js.map +1 -0
  224. package/dist/security/GenomeSecurityBridge.d.ts +47 -0
  225. package/dist/security/GenomeSecurityBridge.d.ts.map +1 -0
  226. package/dist/security/GenomeSecurityBridge.js +157 -0
  227. package/dist/security/GenomeSecurityBridge.js.map +1 -0
  228. package/dist/security/KeyHierarchy.d.ts +23 -0
  229. package/dist/security/KeyHierarchy.d.ts.map +1 -0
  230. package/dist/security/KeyHierarchy.js +78 -0
  231. package/dist/security/KeyHierarchy.js.map +1 -0
  232. package/dist/security/KeychainAdapter.d.ts +19 -0
  233. package/dist/security/KeychainAdapter.d.ts.map +1 -0
  234. package/dist/security/KeychainAdapter.js +104 -0
  235. package/dist/security/KeychainAdapter.js.map +1 -0
  236. package/dist/security/LLMProxyLayer.d.ts +63 -0
  237. package/dist/security/LLMProxyLayer.d.ts.map +1 -0
  238. package/dist/security/LLMProxyLayer.js +148 -0
  239. package/dist/security/LLMProxyLayer.js.map +1 -0
  240. package/dist/security/MFAProvider.d.ts +35 -0
  241. package/dist/security/MFAProvider.d.ts.map +1 -0
  242. package/dist/security/MFAProvider.js +174 -0
  243. package/dist/security/MFAProvider.js.map +1 -0
  244. package/dist/security/NetworkAuditLogger.d.ts +35 -0
  245. package/dist/security/NetworkAuditLogger.d.ts.map +1 -0
  246. package/dist/security/NetworkAuditLogger.js +99 -0
  247. package/dist/security/NetworkAuditLogger.js.map +1 -0
  248. package/dist/security/OutboundAllowlist.d.ts +33 -0
  249. package/dist/security/OutboundAllowlist.d.ts.map +1 -0
  250. package/dist/security/OutboundAllowlist.js +112 -0
  251. package/dist/security/OutboundAllowlist.js.map +1 -0
  252. package/dist/security/PIIRedactionEngine.d.ts +40 -0
  253. package/dist/security/PIIRedactionEngine.d.ts.map +1 -0
  254. package/dist/security/PIIRedactionEngine.js +232 -0
  255. package/dist/security/PIIRedactionEngine.js.map +1 -0
  256. package/dist/security/RBACEngine.d.ts +44 -0
  257. package/dist/security/RBACEngine.d.ts.map +1 -0
  258. package/dist/security/RBACEngine.js +209 -0
  259. package/dist/security/RBACEngine.js.map +1 -0
  260. package/dist/security/SOC2Controls.d.ts +37 -0
  261. package/dist/security/SOC2Controls.d.ts.map +1 -0
  262. package/dist/security/SOC2Controls.js +151 -0
  263. package/dist/security/SOC2Controls.js.map +1 -0
  264. package/dist/security/SecretRotationEngine.d.ts +46 -0
  265. package/dist/security/SecretRotationEngine.d.ts.map +1 -0
  266. package/dist/security/SecretRotationEngine.js +102 -0
  267. package/dist/security/SecretRotationEngine.js.map +1 -0
  268. package/dist/security/SecretsMigrator.d.ts +28 -0
  269. package/dist/security/SecretsMigrator.d.ts.map +1 -0
  270. package/dist/security/SecretsMigrator.js +170 -0
  271. package/dist/security/SecretsMigrator.js.map +1 -0
  272. package/dist/security/SecurityEventBus.d.ts +48 -0
  273. package/dist/security/SecurityEventBus.d.ts.map +1 -0
  274. package/dist/security/SecurityEventBus.js +105 -0
  275. package/dist/security/SecurityEventBus.js.map +1 -0
  276. package/dist/security/SecurityPresets.d.ts +42 -0
  277. package/dist/security/SecurityPresets.d.ts.map +1 -0
  278. package/dist/security/SecurityPresets.js +162 -0
  279. package/dist/security/SecurityPresets.js.map +1 -0
  280. package/dist/security/SkillManifest.d.ts +34 -0
  281. package/dist/security/SkillManifest.d.ts.map +1 -0
  282. package/dist/security/SkillManifest.js +91 -0
  283. package/dist/security/SkillManifest.js.map +1 -0
  284. package/dist/security/SkillSigner.d.ts +22 -0
  285. package/dist/security/SkillSigner.d.ts.map +1 -0
  286. package/dist/security/SkillSigner.js +80 -0
  287. package/dist/security/SkillSigner.js.map +1 -0
  288. package/dist/security/TamperProofAuditLog.d.ts +58 -0
  289. package/dist/security/TamperProofAuditLog.d.ts.map +1 -0
  290. package/dist/security/TamperProofAuditLog.js +214 -0
  291. package/dist/security/TamperProofAuditLog.js.map +1 -0
  292. package/dist/security/index.d.ts +27 -0
  293. package/dist/security/index.d.ts.map +1 -0
  294. package/dist/security/index.js +27 -0
  295. package/dist/security/index.js.map +1 -0
  296. package/dist/skills/ProactiveEngine.d.ts +55 -0
  297. package/dist/skills/ProactiveEngine.d.ts.map +1 -0
  298. package/dist/skills/ProactiveEngine.js +201 -0
  299. package/dist/skills/ProactiveEngine.js.map +1 -0
  300. package/dist/skills/SkillExecutor.d.ts +21 -0
  301. package/dist/skills/SkillExecutor.d.ts.map +1 -0
  302. package/dist/skills/SkillExecutor.js +131 -0
  303. package/dist/skills/SkillExecutor.js.map +1 -0
  304. package/dist/skills/SkillRegistry.d.ts +47 -0
  305. package/dist/skills/SkillRegistry.d.ts.map +1 -0
  306. package/dist/skills/SkillRegistry.js +94 -0
  307. package/dist/skills/SkillRegistry.js.map +1 -0
  308. package/dist/skills/SkillRouter.d.ts +30 -0
  309. package/dist/skills/SkillRouter.d.ts.map +1 -0
  310. package/dist/skills/SkillRouter.js +113 -0
  311. package/dist/skills/SkillRouter.js.map +1 -0
  312. package/dist/skills/index.d.ts +9 -0
  313. package/dist/skills/index.d.ts.map +1 -0
  314. package/dist/skills/index.js +5 -0
  315. package/dist/skills/index.js.map +1 -0
  316. package/dist/types/GenomeV2.d.ts +12 -0
  317. package/dist/types/GenomeV2.d.ts.map +1 -1
  318. package/dist/types/index.d.ts +19 -0
  319. package/dist/types/index.d.ts.map +1 -1
  320. package/dist/wrap/FileStorageAdapter.d.ts +113 -0
  321. package/dist/wrap/FileStorageAdapter.d.ts.map +1 -0
  322. package/dist/wrap/FileStorageAdapter.js +239 -0
  323. package/dist/wrap/FileStorageAdapter.js.map +1 -0
  324. package/dist/wrap/SQLiteStorageAdapter.d.ts +96 -0
  325. package/dist/wrap/SQLiteStorageAdapter.d.ts.map +1 -0
  326. package/dist/wrap/SQLiteStorageAdapter.js +251 -0
  327. package/dist/wrap/SQLiteStorageAdapter.js.map +1 -0
  328. package/dist/wrap/WrappedAgent.d.ts +2 -2
  329. package/dist/wrap/WrappedAgent.d.ts.map +1 -1
  330. package/dist/wrap/WrappedAgent.js +7 -7
  331. package/dist/wrap/WrappedAgent.js.map +1 -1
  332. package/dist/wrap.d.ts +39 -0
  333. package/dist/wrap.d.ts.map +1 -0
  334. package/dist/wrap.js +96 -0
  335. package/dist/wrap.js.map +1 -0
  336. package/package.json +34 -7
  337. package/dist/PGA.d.ts.map +0 -1
  338. package/dist/PGA.js.map +0 -1
  339. package/dist/evolution/PromotionGate.d.ts +0 -45
  340. package/dist/evolution/PromotionGate.d.ts.map +0 -1
  341. package/dist/evolution/PromotionGate.js +0 -248
  342. package/dist/evolution/PromotionGate.js.map +0 -1
  343. package/dist/gene-bank/PGAIntegration.d.ts.map +0 -1
  344. package/dist/gene-bank/PGAIntegration.js.map +0 -1
@@ -0,0 +1,112 @@
1
+ const PRIVATE_IP_PATTERNS = [
2
+ /^10\./,
3
+ /^172\.(1[6-9]|2\d|3[01])\./,
4
+ /^192\.168\./,
5
+ /^127\./,
6
+ /^169\.254\./,
7
+ /^0\./,
8
+ /^::1$/,
9
+ /^fc00:/i,
10
+ /^fe80:/i,
11
+ ];
12
+ const PRIVATE_HOSTNAMES = [
13
+ 'localhost',
14
+ 'localhost.localdomain',
15
+ 'metadata.google.internal',
16
+ 'instance-data.ec2.internal',
17
+ ];
18
+ export class OutboundAllowlist {
19
+ eventBus;
20
+ allowedDomains;
21
+ blockPrivateNetworks;
22
+ mode;
23
+ stats = { totalChecks: 0, allowed: 0, blocked: 0 };
24
+ constructor(eventBus, config) {
25
+ this.eventBus = eventBus;
26
+ this.allowedDomains = config.allowedDomains;
27
+ this.blockPrivateNetworks = config.blockPrivateNetworks;
28
+ this.mode = config.mode;
29
+ }
30
+ check(hostname, skillId) {
31
+ this.stats.totalChecks++;
32
+ if (this.mode === 'unrestricted') {
33
+ this.stats.allowed++;
34
+ return { allowed: true, hostname };
35
+ }
36
+ if (this.blockPrivateNetworks && this.isPrivateNetwork(hostname)) {
37
+ this.stats.blocked++;
38
+ this.eventBus.emitDeny('security:net-blocked', 6, { type: 'outbound', id: hostname, detail: 'Private network blocked (SSRF prevention)' }, 'high', { skillId });
39
+ return { allowed: false, reason: 'Private network access blocked', hostname };
40
+ }
41
+ if (this.mode === 'strict' && !this.isDomainAllowed(hostname)) {
42
+ this.stats.blocked++;
43
+ this.eventBus.emitDeny('security:net-blocked', 6, { type: 'outbound', id: hostname, detail: 'Domain not in allowlist' }, 'warning', { skillId });
44
+ return { allowed: false, reason: `Domain "${hostname}" not in allowlist`, hostname };
45
+ }
46
+ if (this.mode === 'broad' && this.isSuspiciousDomain(hostname)) {
47
+ this.stats.blocked++;
48
+ this.eventBus.emitDeny('security:net-blocked', 6, { type: 'outbound', id: hostname, detail: 'Suspicious domain blocked' }, 'warning', { skillId });
49
+ return { allowed: false, reason: `Suspicious domain blocked: ${hostname}`, hostname };
50
+ }
51
+ this.stats.allowed++;
52
+ this.eventBus.emitAllow('security:net-allowed', 6, {
53
+ type: 'outbound',
54
+ id: hostname,
55
+ }, { skillId });
56
+ return { allowed: true, hostname };
57
+ }
58
+ checkURL(url, skillId) {
59
+ try {
60
+ const parsed = new URL(url);
61
+ return this.check(parsed.hostname, skillId);
62
+ }
63
+ catch {
64
+ return { allowed: false, reason: 'Invalid URL', hostname: url };
65
+ }
66
+ }
67
+ addDomain(domain) {
68
+ if (!this.allowedDomains.includes(domain)) {
69
+ this.allowedDomains.push(domain);
70
+ }
71
+ }
72
+ removeDomain(domain) {
73
+ const idx = this.allowedDomains.indexOf(domain);
74
+ if (idx === -1)
75
+ return false;
76
+ this.allowedDomains.splice(idx, 1);
77
+ return true;
78
+ }
79
+ getDomains() {
80
+ return [...this.allowedDomains];
81
+ }
82
+ getStats() {
83
+ return { ...this.stats };
84
+ }
85
+ isPrivateNetwork(hostname) {
86
+ if (PRIVATE_HOSTNAMES.includes(hostname.toLowerCase()))
87
+ return true;
88
+ return PRIVATE_IP_PATTERNS.some(p => p.test(hostname));
89
+ }
90
+ isDomainAllowed(hostname) {
91
+ const lower = hostname.toLowerCase();
92
+ return this.allowedDomains.some(pattern => {
93
+ const lowerPattern = pattern.toLowerCase();
94
+ if (lowerPattern.startsWith('*.')) {
95
+ const suffix = lowerPattern.slice(1);
96
+ return lower.endsWith(suffix) || lower === lowerPattern.slice(2);
97
+ }
98
+ return lower === lowerPattern;
99
+ });
100
+ }
101
+ isSuspiciousDomain(hostname) {
102
+ const suspicious = [
103
+ /\.onion$/i,
104
+ /\.i2p$/i,
105
+ /\.bit$/i,
106
+ /^(\d{1,3}\.){3}\d{1,3}$/,
107
+ /webhook|hook|exfil|collect|log|beacon/i,
108
+ ];
109
+ return suspicious.some(p => p.test(hostname));
110
+ }
111
+ }
112
+ //# sourceMappingURL=OutboundAllowlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OutboundAllowlist.js","sourceRoot":"","sources":["../../src/security/OutboundAllowlist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export type PIICategory = 'credit-card' | 'ssn' | 'email' | 'phone' | 'iban' | 'api-key' | 'ip-address' | 'passport' | 'national-id';
2
+ export interface PIIMatch {
3
+ category: PIICategory;
4
+ original: string;
5
+ token: string;
6
+ startIndex: number;
7
+ endIndex: number;
8
+ }
9
+ export interface RedactionResult {
10
+ redacted: string;
11
+ matches: PIIMatch[];
12
+ categories: PIICategory[];
13
+ }
14
+ export declare class PIIRedactionEngine {
15
+ private vault;
16
+ private enabledCategories;
17
+ private vaultMaxSize;
18
+ private vaultTTLMs;
19
+ private stats;
20
+ constructor(options?: {
21
+ categories?: PIICategory[];
22
+ vaultMaxSize?: number;
23
+ vaultTTLMs?: number;
24
+ });
25
+ redact(text: string): RedactionResult;
26
+ rehydrate(text: string): string;
27
+ scan(text: string): {
28
+ hasPII: boolean;
29
+ categories: PIICategory[];
30
+ count: number;
31
+ };
32
+ getStats(): typeof this.stats;
33
+ clearVault(): void;
34
+ getVaultSize(): number;
35
+ private generateToken;
36
+ private categoryShort;
37
+ private removeOverlaps;
38
+ private cleanupVault;
39
+ }
40
+ //# sourceMappingURL=PIIRedactionEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PIIRedactionEngine.d.ts","sourceRoot":"","sources":["../../src/security/PIIRedactionEngine.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,WAAW,GACjB,aAAa,GACb,KAAK,GACL,OAAO,GACP,OAAO,GACP,MAAM,GACN,SAAS,GACT,YAAY,GACZ,UAAU,GACV,aAAa,CAAC;AAEpB,MAAM,WAAW,QAAQ;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,UAAU,EAAE,WAAW,EAAE,CAAC;CAC7B;AAsID,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,KAAK,CAA0F;IACvG,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAa;IAG/B,OAAO,CAAC,KAAK,CAIX;gBAEU,OAAO,CAAC,EAAE;QAClB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;QAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACvB;IAYD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IA4ErC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAa/B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,WAAW,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAgBjF,QAAQ,IAAI,OAAO,IAAI,CAAC,KAAK;IAO7B,UAAU,IAAI,IAAI;IAOlB,YAAY,IAAI,MAAM;IAMtB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,YAAY;CAmBvB"}
@@ -0,0 +1,232 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ function luhnCheck(num) {
3
+ const digits = num.replace(/\D/g, '');
4
+ if (digits.length < 13 || digits.length > 19)
5
+ return false;
6
+ let sum = 0;
7
+ let alternate = false;
8
+ for (let i = digits.length - 1; i >= 0; i--) {
9
+ let n = parseInt(digits[i], 10);
10
+ if (alternate) {
11
+ n *= 2;
12
+ if (n > 9)
13
+ n -= 9;
14
+ }
15
+ sum += n;
16
+ alternate = !alternate;
17
+ }
18
+ return sum % 10 === 0;
19
+ }
20
+ function isValidIBAN(iban) {
21
+ const cleaned = iban.replace(/\s/g, '').toUpperCase();
22
+ if (cleaned.length < 15 || cleaned.length > 34)
23
+ return false;
24
+ if (!/^[A-Z]{2}\d{2}[A-Z0-9]+$/.test(cleaned))
25
+ return false;
26
+ const rearranged = cleaned.slice(4) + cleaned.slice(0, 4);
27
+ const numeric = rearranged.replace(/[A-Z]/g, ch => String(ch.charCodeAt(0) - 55));
28
+ let remainder = '';
29
+ for (const digit of numeric) {
30
+ remainder += digit;
31
+ const num = parseInt(remainder, 10);
32
+ remainder = String(num % 97);
33
+ }
34
+ return parseInt(remainder, 10) === 1;
35
+ }
36
+ const PII_PATTERNS = [
37
+ {
38
+ category: 'api-key',
39
+ regex: /\b(?:sk-ant-[A-Za-z0-9\-]{20,}|sk-[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{36,}|ghs_[A-Za-z0-9]{36,}|glpat-[A-Za-z0-9\-_]{20,}|xox[bpsr]-[A-Za-z0-9\-]{10,}|AKIA[A-Z0-9]{16}|ntn_[A-Za-z0-9]{40,}|whsec_[A-Za-z0-9]{20,})\b/g,
40
+ },
41
+ {
42
+ category: 'iban',
43
+ regex: /\b[A-Z]{2}\d{2}[A-Z0-9]{11,30}\b|\b[A-Z]{2}\d{2}\s?[A-Z0-9]{4}(?:\s?[A-Z0-9]{4}){2,7}(?:\s?[A-Z0-9]{1,4})?\b/g,
44
+ validate: isValidIBAN,
45
+ },
46
+ {
47
+ category: 'credit-card',
48
+ regex: /\b(?:\d{4}[-\s]?){3}\d{1,4}\b/g,
49
+ validate: (match) => luhnCheck(match.replace(/[-\s]/g, '')),
50
+ },
51
+ {
52
+ category: 'ssn',
53
+ regex: /\b\d{3}-\d{2}-\d{4}\b/g,
54
+ validate: (match) => {
55
+ const parts = match.split('-');
56
+ const area = parseInt(parts[0], 10);
57
+ return area > 0 && area !== 666 && area < 900;
58
+ },
59
+ },
60
+ {
61
+ category: 'email',
62
+ regex: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g,
63
+ },
64
+ {
65
+ category: 'phone',
66
+ regex: /\+\d{1,3}[-.\s]?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}\b|\b\(?\d{3}\)?[-.\s]\d{3}[-.\s]\d{4}\b/g,
67
+ validate: (match) => {
68
+ const digits = match.replace(/\D/g, '');
69
+ return digits.length >= 7 && digits.length <= 15;
70
+ },
71
+ },
72
+ {
73
+ category: 'ip-address',
74
+ regex: /\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b/g,
75
+ validate: (match) => {
76
+ return match !== '0.0.0.0' && match !== '127.0.0.1' && match !== '255.255.255.255';
77
+ },
78
+ },
79
+ {
80
+ category: 'national-id',
81
+ regex: /\b[CFGHJKLMNPRTVWXYZ0-9]{10}\b/g,
82
+ },
83
+ {
84
+ category: 'passport',
85
+ regex: /\b[A-Z]{1,2}\d{6,9}\b/g,
86
+ },
87
+ ];
88
+ export class PIIRedactionEngine {
89
+ vault = new Map();
90
+ enabledCategories;
91
+ vaultMaxSize = 10_000;
92
+ vaultTTLMs = 3_600_000;
93
+ stats = {
94
+ totalScanned: 0,
95
+ totalRedacted: 0,
96
+ byCategory: {},
97
+ };
98
+ constructor(options) {
99
+ this.enabledCategories = options?.categories
100
+ ? new Set(options.categories)
101
+ : new Set(PII_PATTERNS.map(p => p.category));
102
+ if (options?.vaultMaxSize)
103
+ this.vaultMaxSize = options.vaultMaxSize;
104
+ if (options?.vaultTTLMs)
105
+ this.vaultTTLMs = options.vaultTTLMs;
106
+ }
107
+ redact(text) {
108
+ this.stats.totalScanned++;
109
+ const matches = [];
110
+ let redacted = text;
111
+ const allMatches = [];
112
+ for (const pattern of PII_PATTERNS) {
113
+ if (!this.enabledCategories.has(pattern.category))
114
+ continue;
115
+ pattern.regex.lastIndex = 0;
116
+ let match;
117
+ while ((match = pattern.regex.exec(text)) !== null) {
118
+ const value = match[0];
119
+ if (pattern.validate && !pattern.validate(value))
120
+ continue;
121
+ const token = this.generateToken(pattern.category);
122
+ allMatches.push({
123
+ category: pattern.category,
124
+ original: value,
125
+ token,
126
+ startIndex: match.index,
127
+ endIndex: match.index + value.length,
128
+ pattern,
129
+ });
130
+ }
131
+ }
132
+ allMatches.sort((a, b) => b.startIndex - a.startIndex);
133
+ const filtered = this.removeOverlaps(allMatches);
134
+ for (const m of filtered) {
135
+ redacted = redacted.slice(0, m.startIndex) + m.token + redacted.slice(m.endIndex);
136
+ this.vault.set(m.token, {
137
+ original: m.original,
138
+ category: m.category,
139
+ timestamp: Date.now(),
140
+ });
141
+ this.stats.totalRedacted++;
142
+ this.stats.byCategory[m.category] = (this.stats.byCategory[m.category] || 0) + 1;
143
+ matches.push({
144
+ category: m.category,
145
+ original: m.original,
146
+ token: m.token,
147
+ startIndex: m.startIndex,
148
+ endIndex: m.endIndex,
149
+ });
150
+ }
151
+ this.cleanupVault();
152
+ const categories = [...new Set(matches.map(m => m.category))];
153
+ return { redacted, matches: matches.reverse(), categories };
154
+ }
155
+ rehydrate(text) {
156
+ let result = text;
157
+ for (const [token, entry] of this.vault) {
158
+ if (result.includes(token)) {
159
+ result = result.replaceAll(token, entry.original);
160
+ }
161
+ }
162
+ return result;
163
+ }
164
+ scan(text) {
165
+ const result = this.redact(text);
166
+ for (const match of result.matches) {
167
+ this.vault.delete(match.token);
168
+ }
169
+ return {
170
+ hasPII: result.matches.length > 0,
171
+ categories: result.categories,
172
+ count: result.matches.length,
173
+ };
174
+ }
175
+ getStats() {
176
+ return { ...this.stats };
177
+ }
178
+ clearVault() {
179
+ this.vault.clear();
180
+ }
181
+ getVaultSize() {
182
+ return this.vault.size;
183
+ }
184
+ generateToken(category) {
185
+ const id = randomBytes(2).toString('hex');
186
+ const short = this.categoryShort(category);
187
+ return `[REDACTED:${short}:${id}]`;
188
+ }
189
+ categoryShort(category) {
190
+ const map = {
191
+ 'credit-card': 'CC',
192
+ 'ssn': 'SSN',
193
+ 'email': 'EMAIL',
194
+ 'phone': 'PHONE',
195
+ 'iban': 'IBAN',
196
+ 'api-key': 'KEY',
197
+ 'ip-address': 'IP',
198
+ 'passport': 'PASS',
199
+ 'national-id': 'NID',
200
+ };
201
+ return map[category] || 'PII';
202
+ }
203
+ removeOverlaps(matches) {
204
+ const result = [];
205
+ let lastEnd = Infinity;
206
+ for (const m of matches) {
207
+ if (m.endIndex <= lastEnd) {
208
+ result.push(m);
209
+ lastEnd = m.startIndex;
210
+ }
211
+ }
212
+ return result;
213
+ }
214
+ cleanupVault() {
215
+ if (this.vault.size <= this.vaultMaxSize)
216
+ return;
217
+ const now = Date.now();
218
+ for (const [token, entry] of this.vault) {
219
+ if (now - entry.timestamp > this.vaultTTLMs) {
220
+ this.vault.delete(token);
221
+ }
222
+ }
223
+ if (this.vault.size > this.vaultMaxSize) {
224
+ const entries = [...this.vault.entries()].sort((a, b) => a[1].timestamp - b[1].timestamp);
225
+ const toRemove = entries.slice(0, this.vault.size - this.vaultMaxSize);
226
+ for (const [token] of toRemove) {
227
+ this.vault.delete(token);
228
+ }
229
+ }
230
+ }
231
+ }
232
+ //# sourceMappingURL=PIIRedactionEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PIIRedactionEngine.js","sourceRoot":"","sources":["../../src/security/PIIRedactionEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { SecurityEventBus } from './SecurityEventBus.js';
2
+ export type RoleName = 'admin' | 'manager' | 'standard' | 'restricted' | 'auditor';
3
+ export type Permission = 'genome:read' | 'genome:write' | 'genome:evolve' | 'genome:delete' | 'skill:invoke:bundled' | 'skill:invoke:installed' | 'skill:invoke:custom' | 'skill:install' | 'skill:uninstall' | 'exec:safe-bin' | 'exec:allowlist' | 'exec:arbitrary' | 'fs:read:workspace' | 'fs:read:home' | 'fs:read:system' | 'fs:write:workspace' | 'fs:write:home' | 'fs:delete' | 'net:outbound:allowlist' | 'net:outbound:any' | 'net:localhost' | 'cred:read' | 'cred:write' | 'cred:rotate' | 'cred:delete' | 'data:public' | 'data:internal' | 'data:confidential' | 'data:restricted' | 'data:pii' | 'data:financial' | 'data:health' | 'admin:users' | 'admin:roles' | 'admin:policies' | 'admin:audit:read' | 'admin:audit:export' | 'admin:security:configure';
4
+ export interface Role {
5
+ name: RoleName | string;
6
+ description: string;
7
+ permissions: Permission[];
8
+ inherits?: RoleName | string;
9
+ rateLimit: number;
10
+ sessionTimeoutMinutes: number;
11
+ }
12
+ export interface UserAssignment {
13
+ userId: string;
14
+ role: RoleName | string;
15
+ assignedAt: Date;
16
+ assignedBy: string;
17
+ expiresAt?: Date;
18
+ }
19
+ export interface AccessCheckResult {
20
+ allowed: boolean;
21
+ role: string;
22
+ permission: Permission;
23
+ reason?: string;
24
+ }
25
+ export declare class RBACEngine {
26
+ private eventBus;
27
+ private roles;
28
+ private assignments;
29
+ private operationCounts;
30
+ constructor(eventBus: SecurityEventBus);
31
+ assignRole(userId: string, roleName: RoleName | string, assignedBy: string, expiresAt?: Date): void;
32
+ revokeRole(userId: string): boolean;
33
+ checkAccess(userId: string, permission: Permission): AccessCheckResult;
34
+ getUserRole(userId: string): Role | null;
35
+ getUserPermissions(userId: string): Permission[];
36
+ registerRole(role: Role): void;
37
+ getRoles(): Role[];
38
+ getAssignments(): UserAssignment[];
39
+ hasRole(userId: string, roleName: string): boolean;
40
+ private resolvePermissions;
41
+ private checkRateLimit;
42
+ private incrementOps;
43
+ }
44
+ //# sourceMappingURL=RBACEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RBACEngine.d.ts","sourceRoot":"","sources":["../../src/security/RBACEngine.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAEnF,MAAM,MAAM,UAAU,GAEhB,aAAa,GACb,cAAc,GACd,eAAe,GACf,eAAe,GAEf,sBAAsB,GACtB,wBAAwB,GACxB,qBAAqB,GACrB,eAAe,GACf,iBAAiB,GAEjB,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAEhB,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,oBAAoB,GACpB,eAAe,GACf,WAAW,GAEX,wBAAwB,GACxB,kBAAkB,GAClB,eAAe,GAEf,WAAW,GACX,YAAY,GACZ,aAAa,GACb,aAAa,GAEb,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,iBAAiB,GACjB,UAAU,GACV,gBAAgB,GAChB,aAAa,GAEb,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,oBAAoB,GACpB,0BAA0B,CAAC;AAEjC,MAAM,WAAW,IAAI;IACjB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,EAAE,CAAC;IAE1B,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAE7B,SAAS,EAAE,MAAM,CAAC;IAElB,qBAAqB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAoGD,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,WAAW,CAA0C;IAC7D,OAAO,CAAC,eAAe,CAAkE;gBAE7E,QAAQ,EAAE,gBAAgB;IActC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI;IA2BnG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAOnC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,iBAAiB;IA6DtE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IASxC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE;IAShD,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAO9B,QAAQ,IAAI,IAAI,EAAE;IAOlB,cAAc,IAAI,cAAc,EAAE;IAOlC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOlD,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;CAMvB"}
@@ -0,0 +1,209 @@
1
+ const ROLE_ADMIN = {
2
+ name: 'admin',
3
+ description: 'Full system control — can manage users, roles, policies, and all operations',
4
+ permissions: [
5
+ 'genome:read', 'genome:write', 'genome:evolve', 'genome:delete',
6
+ 'skill:invoke:bundled', 'skill:invoke:installed', 'skill:invoke:custom', 'skill:install', 'skill:uninstall',
7
+ 'exec:safe-bin', 'exec:allowlist', 'exec:arbitrary',
8
+ 'fs:read:workspace', 'fs:read:home', 'fs:read:system', 'fs:write:workspace', 'fs:write:home', 'fs:delete',
9
+ 'net:outbound:allowlist', 'net:outbound:any', 'net:localhost',
10
+ 'cred:read', 'cred:write', 'cred:rotate', 'cred:delete',
11
+ 'data:public', 'data:internal', 'data:confidential', 'data:restricted', 'data:pii', 'data:financial', 'data:health',
12
+ 'admin:users', 'admin:roles', 'admin:policies', 'admin:audit:read', 'admin:audit:export', 'admin:security:configure',
13
+ ],
14
+ rateLimit: 0,
15
+ sessionTimeoutMinutes: 480,
16
+ };
17
+ const ROLE_MANAGER = {
18
+ name: 'manager',
19
+ description: 'Team lead — can use all skills, access confidential data, view audit logs',
20
+ inherits: 'standard',
21
+ permissions: [
22
+ 'genome:read', 'genome:write', 'genome:evolve',
23
+ 'skill:invoke:bundled', 'skill:invoke:installed', 'skill:invoke:custom', 'skill:install',
24
+ 'exec:safe-bin', 'exec:allowlist',
25
+ 'fs:read:workspace', 'fs:read:home', 'fs:write:workspace', 'fs:write:home',
26
+ 'net:outbound:allowlist', 'net:localhost',
27
+ 'cred:read', 'cred:write',
28
+ 'data:public', 'data:internal', 'data:confidential', 'data:pii',
29
+ 'admin:audit:read',
30
+ ],
31
+ rateLimit: 500,
32
+ sessionTimeoutMinutes: 480,
33
+ };
34
+ const ROLE_STANDARD = {
35
+ name: 'standard',
36
+ description: 'Regular user — bundled skills, workspace access, no admin',
37
+ permissions: [
38
+ 'genome:read',
39
+ 'skill:invoke:bundled', 'skill:invoke:installed',
40
+ 'exec:safe-bin',
41
+ 'fs:read:workspace', 'fs:write:workspace',
42
+ 'net:outbound:allowlist', 'net:localhost',
43
+ 'cred:read',
44
+ 'data:public', 'data:internal',
45
+ ],
46
+ rateLimit: 200,
47
+ sessionTimeoutMinutes: 480,
48
+ };
49
+ const ROLE_RESTRICTED = {
50
+ name: 'restricted',
51
+ description: 'Limited user — read-only access, basic skills only',
52
+ permissions: [
53
+ 'genome:read',
54
+ 'skill:invoke:bundled',
55
+ 'fs:read:workspace',
56
+ 'net:localhost',
57
+ 'data:public',
58
+ ],
59
+ rateLimit: 50,
60
+ sessionTimeoutMinutes: 120,
61
+ };
62
+ const ROLE_AUDITOR = {
63
+ name: 'auditor',
64
+ description: 'Compliance auditor — read-only access to everything + audit logs + export',
65
+ permissions: [
66
+ 'genome:read',
67
+ 'fs:read:workspace', 'fs:read:home',
68
+ 'data:public', 'data:internal', 'data:confidential', 'data:restricted',
69
+ 'admin:audit:read', 'admin:audit:export',
70
+ ],
71
+ rateLimit: 100,
72
+ sessionTimeoutMinutes: 240,
73
+ };
74
+ export class RBACEngine {
75
+ eventBus;
76
+ roles = new Map();
77
+ assignments = new Map();
78
+ operationCounts = new Map();
79
+ constructor(eventBus) {
80
+ this.eventBus = eventBus;
81
+ this.roles.set('admin', ROLE_ADMIN);
82
+ this.roles.set('manager', ROLE_MANAGER);
83
+ this.roles.set('standard', ROLE_STANDARD);
84
+ this.roles.set('restricted', ROLE_RESTRICTED);
85
+ this.roles.set('auditor', ROLE_AUDITOR);
86
+ }
87
+ assignRole(userId, roleName, assignedBy, expiresAt) {
88
+ if (!this.roles.has(roleName)) {
89
+ throw new Error(`[RBAC] Unknown role: ${roleName}`);
90
+ }
91
+ this.assignments.set(userId, {
92
+ userId,
93
+ role: roleName,
94
+ assignedAt: new Date(),
95
+ assignedBy,
96
+ expiresAt,
97
+ });
98
+ this.eventBus.emit({
99
+ type: 'security:audit-entry',
100
+ timestamp: new Date(),
101
+ layer: 4,
102
+ decision: 'info',
103
+ actor: { userId: assignedBy },
104
+ resource: { type: 'role', id: roleName, detail: `Assigned to ${userId}` },
105
+ severity: 'info',
106
+ });
107
+ }
108
+ revokeRole(userId) {
109
+ return this.assignments.delete(userId);
110
+ }
111
+ checkAccess(userId, permission) {
112
+ const assignment = this.assignments.get(userId);
113
+ if (!assignment) {
114
+ return {
115
+ allowed: false,
116
+ role: 'none',
117
+ permission,
118
+ reason: 'No role assigned — defaulting to deny',
119
+ };
120
+ }
121
+ if (assignment.expiresAt && new Date() > assignment.expiresAt) {
122
+ this.assignments.delete(userId);
123
+ return {
124
+ allowed: false,
125
+ role: assignment.role,
126
+ permission,
127
+ reason: 'Role assignment expired',
128
+ };
129
+ }
130
+ const role = this.roles.get(assignment.role);
131
+ if (!role) {
132
+ return { allowed: false, role: assignment.role, permission, reason: 'Role not found' };
133
+ }
134
+ if (role.rateLimit > 0 && !this.checkRateLimit(userId, role.rateLimit)) {
135
+ this.eventBus.emitDeny('security:capability-denied', 4, {
136
+ type: 'rate-limit',
137
+ id: userId,
138
+ detail: `Exceeded ${role.rateLimit} ops/hour`,
139
+ }, 'warning', { userId });
140
+ return { allowed: false, role: role.name, permission, reason: `Rate limit exceeded (${role.rateLimit}/hour)` };
141
+ }
142
+ const allPermissions = this.resolvePermissions(role);
143
+ const allowed = allPermissions.includes(permission);
144
+ if (!allowed) {
145
+ this.eventBus.emitDeny('security:capability-denied', 4, {
146
+ type: 'rbac',
147
+ id: permission,
148
+ detail: `Role ${role.name} lacks ${permission}`,
149
+ }, 'warning', { userId });
150
+ }
151
+ this.incrementOps(userId);
152
+ return { allowed, role: role.name, permission, reason: allowed ? undefined : `Role "${role.name}" does not have permission "${permission}"` };
153
+ }
154
+ getUserRole(userId) {
155
+ const assignment = this.assignments.get(userId);
156
+ if (!assignment)
157
+ return null;
158
+ return this.roles.get(assignment.role) ?? null;
159
+ }
160
+ getUserPermissions(userId) {
161
+ const role = this.getUserRole(userId);
162
+ if (!role)
163
+ return [];
164
+ return this.resolvePermissions(role);
165
+ }
166
+ registerRole(role) {
167
+ this.roles.set(role.name, role);
168
+ }
169
+ getRoles() {
170
+ return [...this.roles.values()];
171
+ }
172
+ getAssignments() {
173
+ return [...this.assignments.values()];
174
+ }
175
+ hasRole(userId, roleName) {
176
+ const assignment = this.assignments.get(userId);
177
+ return assignment?.role === roleName;
178
+ }
179
+ resolvePermissions(role) {
180
+ const permissions = [...role.permissions];
181
+ if (role.inherits) {
182
+ const parent = this.roles.get(role.inherits);
183
+ if (parent) {
184
+ const parentPerms = this.resolvePermissions(parent);
185
+ for (const p of parentPerms) {
186
+ if (!permissions.includes(p))
187
+ permissions.push(p);
188
+ }
189
+ }
190
+ }
191
+ return permissions;
192
+ }
193
+ checkRateLimit(userId, limit) {
194
+ const now = Date.now();
195
+ const record = this.operationCounts.get(userId);
196
+ if (!record || now - record.windowStart > 3_600_000) {
197
+ this.operationCounts.set(userId, { count: 1, windowStart: now });
198
+ return true;
199
+ }
200
+ return record.count < limit;
201
+ }
202
+ incrementOps(userId) {
203
+ const record = this.operationCounts.get(userId);
204
+ if (record) {
205
+ record.count++;
206
+ }
207
+ }
208
+ }
209
+ //# sourceMappingURL=RBACEngine.js.map