@salimassili/ai-costguard 1.1.3

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 (490) hide show
  1. package/README.md +112 -0
  2. package/dist/aecl/ExecutionInterceptor.d.ts +111 -0
  3. package/dist/aecl/ExecutionInterceptor.d.ts.map +1 -0
  4. package/dist/aecl/ExecutionInterceptor.js +280 -0
  5. package/dist/aecl/ExecutionInterceptor.js.map +1 -0
  6. package/dist/aecl/ExecutionMemory.d.ts +103 -0
  7. package/dist/aecl/ExecutionMemory.d.ts.map +1 -0
  8. package/dist/aecl/ExecutionMemory.js +164 -0
  9. package/dist/aecl/ExecutionMemory.js.map +1 -0
  10. package/dist/aecl/PolicyEngine.d.ts +77 -0
  11. package/dist/aecl/PolicyEngine.d.ts.map +1 -0
  12. package/dist/aecl/PolicyEngine.js +170 -0
  13. package/dist/aecl/PolicyEngine.js.map +1 -0
  14. package/dist/aecl/ROITelemetry.d.ts +110 -0
  15. package/dist/aecl/ROITelemetry.d.ts.map +1 -0
  16. package/dist/aecl/ROITelemetry.js +211 -0
  17. package/dist/aecl/ROITelemetry.js.map +1 -0
  18. package/dist/aecl/RiskEngine.d.ts +90 -0
  19. package/dist/aecl/RiskEngine.d.ts.map +1 -0
  20. package/dist/aecl/RiskEngine.js +207 -0
  21. package/dist/aecl/RiskEngine.js.map +1 -0
  22. package/dist/aecl/index.d.ts +76 -0
  23. package/dist/aecl/index.d.ts.map +1 -0
  24. package/dist/aecl/index.js +111 -0
  25. package/dist/aecl/index.js.map +1 -0
  26. package/dist/aerl/ExecutionGraph.d.ts +123 -0
  27. package/dist/aerl/ExecutionGraph.d.ts.map +1 -0
  28. package/dist/aerl/ExecutionGraph.js +289 -0
  29. package/dist/aerl/ExecutionGraph.js.map +1 -0
  30. package/dist/aerl/ExecutionInterceptor.d.ts +94 -0
  31. package/dist/aerl/ExecutionInterceptor.d.ts.map +1 -0
  32. package/dist/aerl/ExecutionInterceptor.js +246 -0
  33. package/dist/aerl/ExecutionInterceptor.js.map +1 -0
  34. package/dist/aerl/ExecutionMemory.d.ts +138 -0
  35. package/dist/aerl/ExecutionMemory.d.ts.map +1 -0
  36. package/dist/aerl/ExecutionMemory.js +284 -0
  37. package/dist/aerl/ExecutionMemory.js.map +1 -0
  38. package/dist/aerl/FailurePrediction.d.ts +71 -0
  39. package/dist/aerl/FailurePrediction.d.ts.map +1 -0
  40. package/dist/aerl/FailurePrediction.js +204 -0
  41. package/dist/aerl/FailurePrediction.js.map +1 -0
  42. package/dist/aerl/RecoveryEngine.d.ts +74 -0
  43. package/dist/aerl/RecoveryEngine.d.ts.map +1 -0
  44. package/dist/aerl/RecoveryEngine.js +194 -0
  45. package/dist/aerl/RecoveryEngine.js.map +1 -0
  46. package/dist/aerl/ReliabilityEngine.d.ts +74 -0
  47. package/dist/aerl/ReliabilityEngine.d.ts.map +1 -0
  48. package/dist/aerl/ReliabilityEngine.js +205 -0
  49. package/dist/aerl/ReliabilityEngine.js.map +1 -0
  50. package/dist/aerl/ReliabilityTelemetry.d.ts +118 -0
  51. package/dist/aerl/ReliabilityTelemetry.d.ts.map +1 -0
  52. package/dist/aerl/ReliabilityTelemetry.js +247 -0
  53. package/dist/aerl/ReliabilityTelemetry.js.map +1 -0
  54. package/dist/aerl/index.d.ts +170 -0
  55. package/dist/aerl/index.d.ts.map +1 -0
  56. package/dist/aerl/index.js +223 -0
  57. package/dist/aerl/index.js.map +1 -0
  58. package/dist/ambient/AmbientProtection.d.ts +79 -0
  59. package/dist/ambient/AmbientProtection.d.ts.map +1 -0
  60. package/dist/ambient/AmbientProtection.js +251 -0
  61. package/dist/ambient/AmbientProtection.js.map +1 -0
  62. package/dist/bin/start.d.ts +14 -0
  63. package/dist/bin/start.d.ts.map +1 -0
  64. package/dist/bin/start.js +54 -0
  65. package/dist/bin/start.js.map +1 -0
  66. package/dist/cli/index.d.ts +3 -0
  67. package/dist/cli/index.d.ts.map +1 -0
  68. package/dist/cli/index.js +64 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/outputContract.d.ts +19 -0
  71. package/dist/cli/outputContract.d.ts.map +1 -0
  72. package/dist/cli/outputContract.js +54 -0
  73. package/dist/cli/outputContract.js.map +1 -0
  74. package/dist/cli/storage.d.ts +61 -0
  75. package/dist/cli/storage.d.ts.map +1 -0
  76. package/dist/cli/storage.js +143 -0
  77. package/dist/cli/storage.js.map +1 -0
  78. package/dist/client.d.ts +29 -0
  79. package/dist/client.d.ts.map +1 -0
  80. package/dist/client.js +58 -0
  81. package/dist/client.js.map +1 -0
  82. package/dist/config/constants.d.ts +109 -0
  83. package/dist/config/constants.d.ts.map +1 -0
  84. package/dist/config/constants.js +151 -0
  85. package/dist/config/constants.js.map +1 -0
  86. package/dist/config/index.d.ts +5 -0
  87. package/dist/config/index.d.ts.map +1 -0
  88. package/dist/config/index.js +21 -0
  89. package/dist/config/index.js.map +1 -0
  90. package/dist/config/pricing.d.ts +12 -0
  91. package/dist/config/pricing.d.ts.map +1 -0
  92. package/dist/config/pricing.js +45 -0
  93. package/dist/config/pricing.js.map +1 -0
  94. package/dist/config/productionConfig.d.ts +8 -0
  95. package/dist/config/productionConfig.d.ts.map +1 -0
  96. package/dist/config/productionConfig.js +21 -0
  97. package/dist/config/productionConfig.js.map +1 -0
  98. package/dist/config/userConfig.d.ts +31 -0
  99. package/dist/config/userConfig.d.ts.map +1 -0
  100. package/dist/config/userConfig.js +116 -0
  101. package/dist/config/userConfig.js.map +1 -0
  102. package/dist/controlPlane/configServer.d.ts +7 -0
  103. package/dist/controlPlane/configServer.d.ts.map +1 -0
  104. package/dist/controlPlane/configServer.js +47 -0
  105. package/dist/controlPlane/configServer.js.map +1 -0
  106. package/dist/core/AgentBehaviorGraph.d.ts +163 -0
  107. package/dist/core/AgentBehaviorGraph.d.ts.map +1 -0
  108. package/dist/core/AgentBehaviorGraph.js +341 -0
  109. package/dist/core/AgentBehaviorGraph.js.map +1 -0
  110. package/dist/core/AlertManager.d.ts +19 -0
  111. package/dist/core/AlertManager.d.ts.map +1 -0
  112. package/dist/core/AlertManager.js +64 -0
  113. package/dist/core/AlertManager.js.map +1 -0
  114. package/dist/core/AuditTrail.d.ts +107 -0
  115. package/dist/core/AuditTrail.d.ts.map +1 -0
  116. package/dist/core/AuditTrail.js +256 -0
  117. package/dist/core/AuditTrail.js.map +1 -0
  118. package/dist/core/CostLedger.d.ts +135 -0
  119. package/dist/core/CostLedger.d.ts.map +1 -0
  120. package/dist/core/CostLedger.js +224 -0
  121. package/dist/core/CostLedger.js.map +1 -0
  122. package/dist/core/CostPredictionEngine.d.ts +110 -0
  123. package/dist/core/CostPredictionEngine.d.ts.map +1 -0
  124. package/dist/core/CostPredictionEngine.js +225 -0
  125. package/dist/core/CostPredictionEngine.js.map +1 -0
  126. package/dist/core/CostTruthEngine.d.ts +108 -0
  127. package/dist/core/CostTruthEngine.d.ts.map +1 -0
  128. package/dist/core/CostTruthEngine.js +170 -0
  129. package/dist/core/CostTruthEngine.js.map +1 -0
  130. package/dist/core/DetectionEngine.d.ts +147 -0
  131. package/dist/core/DetectionEngine.d.ts.map +1 -0
  132. package/dist/core/DetectionEngine.js +429 -0
  133. package/dist/core/DetectionEngine.js.map +1 -0
  134. package/dist/core/ExecutionInterceptor.d.ts +135 -0
  135. package/dist/core/ExecutionInterceptor.d.ts.map +1 -0
  136. package/dist/core/ExecutionInterceptor.js +285 -0
  137. package/dist/core/ExecutionInterceptor.js.map +1 -0
  138. package/dist/core/ExplainabilityLayer.d.ts +109 -0
  139. package/dist/core/ExplainabilityLayer.d.ts.map +1 -0
  140. package/dist/core/ExplainabilityLayer.js +277 -0
  141. package/dist/core/ExplainabilityLayer.js.map +1 -0
  142. package/dist/core/LearningSystem.d.ts +124 -0
  143. package/dist/core/LearningSystem.d.ts.map +1 -0
  144. package/dist/core/LearningSystem.js +294 -0
  145. package/dist/core/LearningSystem.js.map +1 -0
  146. package/dist/core/Logger.d.ts +122 -0
  147. package/dist/core/Logger.d.ts.map +1 -0
  148. package/dist/core/Logger.js +233 -0
  149. package/dist/core/Logger.js.map +1 -0
  150. package/dist/core/PolicyEngine.d.ts +148 -0
  151. package/dist/core/PolicyEngine.d.ts.map +1 -0
  152. package/dist/core/PolicyEngine.js +336 -0
  153. package/dist/core/PolicyEngine.js.map +1 -0
  154. package/dist/core/PricingConfig.d.ts +55 -0
  155. package/dist/core/PricingConfig.d.ts.map +1 -0
  156. package/dist/core/PricingConfig.js +132 -0
  157. package/dist/core/PricingConfig.js.map +1 -0
  158. package/dist/core/SessionStats.d.ts +101 -0
  159. package/dist/core/SessionStats.d.ts.map +1 -0
  160. package/dist/core/SessionStats.js +261 -0
  161. package/dist/core/SessionStats.js.map +1 -0
  162. package/dist/core/StateStore.d.ts +100 -0
  163. package/dist/core/StateStore.d.ts.map +1 -0
  164. package/dist/core/StateStore.js +336 -0
  165. package/dist/core/StateStore.js.map +1 -0
  166. package/dist/core/index.d.ts +3 -0
  167. package/dist/core/index.d.ts.map +1 -0
  168. package/dist/core/index.js +19 -0
  169. package/dist/core/index.js.map +1 -0
  170. package/dist/core/types.d.ts +26 -0
  171. package/dist/core/types.d.ts.map +1 -0
  172. package/dist/core/types.js +3 -0
  173. package/dist/core/types.js.map +1 -0
  174. package/dist/cost-guard.d.ts +41 -0
  175. package/dist/cost-guard.d.ts.map +1 -0
  176. package/dist/cost-guard.js +274 -0
  177. package/dist/cost-guard.js.map +1 -0
  178. package/dist/dashboard/roiDashboard.d.ts +12 -0
  179. package/dist/dashboard/roiDashboard.d.ts.map +1 -0
  180. package/dist/dashboard/roiDashboard.js +28 -0
  181. package/dist/dashboard/roiDashboard.js.map +1 -0
  182. package/dist/demo/compareExecution.d.ts +9 -0
  183. package/dist/demo/compareExecution.d.ts.map +1 -0
  184. package/dist/demo/compareExecution.js +43 -0
  185. package/dist/demo/compareExecution.js.map +1 -0
  186. package/dist/demo/demoRunner.d.ts +16 -0
  187. package/dist/demo/demoRunner.d.ts.map +1 -0
  188. package/dist/demo/demoRunner.js +73 -0
  189. package/dist/demo/demoRunner.js.map +1 -0
  190. package/dist/firewall/costEstimator.d.ts +3 -0
  191. package/dist/firewall/costEstimator.d.ts.map +1 -0
  192. package/dist/firewall/costEstimator.js +22 -0
  193. package/dist/firewall/costEstimator.js.map +1 -0
  194. package/dist/firewall/executionGuard.d.ts +18 -0
  195. package/dist/firewall/executionGuard.d.ts.map +1 -0
  196. package/dist/firewall/executionGuard.js +80 -0
  197. package/dist/firewall/executionGuard.js.map +1 -0
  198. package/dist/firewall/loopDetector.d.ts +13 -0
  199. package/dist/firewall/loopDetector.d.ts.map +1 -0
  200. package/dist/firewall/loopDetector.js +24 -0
  201. package/dist/firewall/loopDetector.js.map +1 -0
  202. package/dist/firewall/policy.d.ts +4 -0
  203. package/dist/firewall/policy.d.ts.map +1 -0
  204. package/dist/firewall/policy.js +16 -0
  205. package/dist/firewall/policy.js.map +1 -0
  206. package/dist/firewall/types.d.ts +38 -0
  207. package/dist/firewall/types.d.ts.map +1 -0
  208. package/dist/firewall/types.js +3 -0
  209. package/dist/firewall/types.js.map +1 -0
  210. package/dist/index.d.ts +40 -0
  211. package/dist/index.d.ts.map +1 -0
  212. package/dist/index.js +76 -0
  213. package/dist/index.js.map +1 -0
  214. package/dist/logger/console.d.ts +27 -0
  215. package/dist/logger/console.d.ts.map +1 -0
  216. package/dist/logger/console.js +68 -0
  217. package/dist/logger/console.js.map +1 -0
  218. package/dist/logger/database.d.ts +40 -0
  219. package/dist/logger/database.d.ts.map +1 -0
  220. package/dist/logger/database.js +127 -0
  221. package/dist/logger/database.js.map +1 -0
  222. package/dist/logger/index.d.ts +3 -0
  223. package/dist/logger/index.d.ts.map +1 -0
  224. package/dist/logger/index.js +11 -0
  225. package/dist/logger/index.js.map +1 -0
  226. package/dist/loop-shield.d.ts +48 -0
  227. package/dist/loop-shield.d.ts.map +1 -0
  228. package/dist/loop-shield.js +436 -0
  229. package/dist/loop-shield.js.map +1 -0
  230. package/dist/metrics/BusinessMetricsEngine.d.ts +109 -0
  231. package/dist/metrics/BusinessMetricsEngine.d.ts.map +1 -0
  232. package/dist/metrics/BusinessMetricsEngine.js +222 -0
  233. package/dist/metrics/BusinessMetricsEngine.js.map +1 -0
  234. package/dist/metrics/index.d.ts +11 -0
  235. package/dist/metrics/index.d.ts.map +1 -0
  236. package/dist/metrics/index.js +17 -0
  237. package/dist/metrics/index.js.map +1 -0
  238. package/dist/middleware/expressFirewall.d.ts +51 -0
  239. package/dist/middleware/expressFirewall.d.ts.map +1 -0
  240. package/dist/middleware/expressFirewall.js +140 -0
  241. package/dist/middleware/expressFirewall.js.map +1 -0
  242. package/dist/middleware/index.d.ts +8 -0
  243. package/dist/middleware/index.d.ts.map +1 -0
  244. package/dist/middleware/index.js +15 -0
  245. package/dist/middleware/index.js.map +1 -0
  246. package/dist/middleware/withFirewall.d.ts +50 -0
  247. package/dist/middleware/withFirewall.d.ts.map +1 -0
  248. package/dist/middleware/withFirewall.js +155 -0
  249. package/dist/middleware/withFirewall.js.map +1 -0
  250. package/dist/observability/logger.d.ts +14 -0
  251. package/dist/observability/logger.d.ts.map +1 -0
  252. package/dist/observability/logger.js +21 -0
  253. package/dist/observability/logger.js.map +1 -0
  254. package/dist/observability/metrics.d.ts +17 -0
  255. package/dist/observability/metrics.d.ts.map +1 -0
  256. package/dist/observability/metrics.js +36 -0
  257. package/dist/observability/metrics.js.map +1 -0
  258. package/dist/os/ExecutionOS.d.ts +220 -0
  259. package/dist/os/ExecutionOS.d.ts.map +1 -0
  260. package/dist/os/ExecutionOS.js +398 -0
  261. package/dist/os/ExecutionOS.js.map +1 -0
  262. package/dist/os/GlobalIntelligence.d.ts +154 -0
  263. package/dist/os/GlobalIntelligence.d.ts.map +1 -0
  264. package/dist/os/GlobalIntelligence.js +374 -0
  265. package/dist/os/GlobalIntelligence.js.map +1 -0
  266. package/dist/os/PolicyMarketplace.d.ts +192 -0
  267. package/dist/os/PolicyMarketplace.d.ts.map +1 -0
  268. package/dist/os/PolicyMarketplace.js +384 -0
  269. package/dist/os/PolicyMarketplace.js.map +1 -0
  270. package/dist/os/SDKInterception.d.ts +115 -0
  271. package/dist/os/SDKInterception.d.ts.map +1 -0
  272. package/dist/os/SDKInterception.js +317 -0
  273. package/dist/os/SDKInterception.js.map +1 -0
  274. package/dist/os/index.d.ts +60 -0
  275. package/dist/os/index.d.ts.map +1 -0
  276. package/dist/os/index.js +82 -0
  277. package/dist/os/index.js.map +1 -0
  278. package/dist/proxy/index.d.ts +2 -0
  279. package/dist/proxy/index.d.ts.map +1 -0
  280. package/dist/proxy/index.js +18 -0
  281. package/dist/proxy/index.js.map +1 -0
  282. package/dist/proxy/server.d.ts +24 -0
  283. package/dist/proxy/server.d.ts.map +1 -0
  284. package/dist/proxy/server.js +395 -0
  285. package/dist/proxy/server.js.map +1 -0
  286. package/dist/public/BenchmarksPage.d.ts +60 -0
  287. package/dist/public/BenchmarksPage.d.ts.map +1 -0
  288. package/dist/public/BenchmarksPage.js +397 -0
  289. package/dist/public/BenchmarksPage.js.map +1 -0
  290. package/dist/public/DocsPage.d.ts +11 -0
  291. package/dist/public/DocsPage.d.ts.map +1 -0
  292. package/dist/public/DocsPage.js +496 -0
  293. package/dist/public/DocsPage.js.map +1 -0
  294. package/dist/public/StatusPage.d.ts +55 -0
  295. package/dist/public/StatusPage.d.ts.map +1 -0
  296. package/dist/public/StatusPage.js +344 -0
  297. package/dist/public/StatusPage.js.map +1 -0
  298. package/dist/public/index.d.ts +12 -0
  299. package/dist/public/index.d.ts.map +1 -0
  300. package/dist/public/index.js +20 -0
  301. package/dist/public/index.js.map +1 -0
  302. package/dist/replacements/axios.d.ts +14 -0
  303. package/dist/replacements/axios.d.ts.map +1 -0
  304. package/dist/replacements/axios.js +35 -0
  305. package/dist/replacements/axios.js.map +1 -0
  306. package/dist/replacements/fetch.d.ts +13 -0
  307. package/dist/replacements/fetch.d.ts.map +1 -0
  308. package/dist/replacements/fetch.js +20 -0
  309. package/dist/replacements/fetch.js.map +1 -0
  310. package/dist/replacements/openai.d.ts +14 -0
  311. package/dist/replacements/openai.d.ts.map +1 -0
  312. package/dist/replacements/openai.js +22 -0
  313. package/dist/replacements/openai.js.map +1 -0
  314. package/dist/saas/CostExplosionDemo.d.ts +56 -0
  315. package/dist/saas/CostExplosionDemo.d.ts.map +1 -0
  316. package/dist/saas/CostExplosionDemo.js +190 -0
  317. package/dist/saas/CostExplosionDemo.js.map +1 -0
  318. package/dist/saas/LiveProtection.d.ts +61 -0
  319. package/dist/saas/LiveProtection.d.ts.map +1 -0
  320. package/dist/saas/LiveProtection.js +187 -0
  321. package/dist/saas/LiveProtection.js.map +1 -0
  322. package/dist/saas/ProductionSaaS.d.ts +56 -0
  323. package/dist/saas/ProductionSaaS.d.ts.map +1 -0
  324. package/dist/saas/ProductionSaaS.js +831 -0
  325. package/dist/saas/ProductionSaaS.js.map +1 -0
  326. package/dist/saas/SaaSServer.d.ts +50 -0
  327. package/dist/saas/SaaSServer.d.ts.map +1 -0
  328. package/dist/saas/SaaSServer.js +669 -0
  329. package/dist/saas/SaaSServer.js.map +1 -0
  330. package/dist/saas/UserStore.d.ts +49 -0
  331. package/dist/saas/UserStore.d.ts.map +1 -0
  332. package/dist/saas/UserStore.js +137 -0
  333. package/dist/saas/UserStore.js.map +1 -0
  334. package/dist/saas/billingMetrics.d.ts +14 -0
  335. package/dist/saas/billingMetrics.d.ts.map +1 -0
  336. package/dist/saas/billingMetrics.js +23 -0
  337. package/dist/saas/billingMetrics.js.map +1 -0
  338. package/dist/saas/index.d.ts +12 -0
  339. package/dist/saas/index.d.ts.map +1 -0
  340. package/dist/saas/index.js +23 -0
  341. package/dist/saas/index.js.map +1 -0
  342. package/dist/saas/telemetry.d.ts +24 -0
  343. package/dist/saas/telemetry.d.ts.map +1 -0
  344. package/dist/saas/telemetry.js +30 -0
  345. package/dist/saas/telemetry.js.map +1 -0
  346. package/dist/saas/usageMeter.d.ts +28 -0
  347. package/dist/saas/usageMeter.d.ts.map +1 -0
  348. package/dist/saas/usageMeter.js +41 -0
  349. package/dist/saas/usageMeter.js.map +1 -0
  350. package/dist/security/TrustBoundaryValidator.d.ts +105 -0
  351. package/dist/security/TrustBoundaryValidator.d.ts.map +1 -0
  352. package/dist/security/TrustBoundaryValidator.js +305 -0
  353. package/dist/security/TrustBoundaryValidator.js.map +1 -0
  354. package/dist/starters/express-protected.d.ts +18 -0
  355. package/dist/starters/express-protected.d.ts.map +1 -0
  356. package/dist/starters/express-protected.js +93 -0
  357. package/dist/starters/express-protected.js.map +1 -0
  358. package/dist/starters/langchain-protected.d.ts +18 -0
  359. package/dist/starters/langchain-protected.d.ts.map +1 -0
  360. package/dist/starters/langchain-protected.js +85 -0
  361. package/dist/starters/langchain-protected.js.map +1 -0
  362. package/dist/starters/openai-protected.d.ts +19 -0
  363. package/dist/starters/openai-protected.d.ts.map +1 -0
  364. package/dist/starters/openai-protected.js +84 -0
  365. package/dist/starters/openai-protected.js.map +1 -0
  366. package/dist/starters/serverless-protected.d.ts +19 -0
  367. package/dist/starters/serverless-protected.d.ts.map +1 -0
  368. package/dist/starters/serverless-protected.js +83 -0
  369. package/dist/starters/serverless-protected.js.map +1 -0
  370. package/dist/storage/adapters.d.ts +24 -0
  371. package/dist/storage/adapters.d.ts.map +1 -0
  372. package/dist/storage/adapters.js +123 -0
  373. package/dist/storage/adapters.js.map +1 -0
  374. package/dist/storage/index.d.ts +2 -0
  375. package/dist/storage/index.d.ts.map +1 -0
  376. package/dist/storage/index.js +8 -0
  377. package/dist/storage/index.js.map +1 -0
  378. package/dist/tests/b2b-hardening.test.d.ts +2 -0
  379. package/dist/tests/b2b-hardening.test.d.ts.map +1 -0
  380. package/dist/tests/b2b-hardening.test.js +164 -0
  381. package/dist/tests/b2b-hardening.test.js.map +1 -0
  382. package/dist/tests/cli.contract.test.d.ts +2 -0
  383. package/dist/tests/cli.contract.test.d.ts.map +1 -0
  384. package/dist/tests/cli.contract.test.js +28 -0
  385. package/dist/tests/cli.contract.test.js.map +1 -0
  386. package/dist/tests/cli.snapshot.test.d.ts +14 -0
  387. package/dist/tests/cli.snapshot.test.d.ts.map +1 -0
  388. package/dist/tests/cli.snapshot.test.js +132 -0
  389. package/dist/tests/cli.snapshot.test.js.map +1 -0
  390. package/dist/tests/cli.strict.test.d.ts +6 -0
  391. package/dist/tests/cli.strict.test.d.ts.map +1 -0
  392. package/dist/tests/cli.strict.test.js +173 -0
  393. package/dist/tests/cli.strict.test.js.map +1 -0
  394. package/dist/tests/cli.test.d.ts +5 -0
  395. package/dist/tests/cli.test.d.ts.map +1 -0
  396. package/dist/tests/cli.test.js +54 -0
  397. package/dist/tests/cli.test.js.map +1 -0
  398. package/dist/tests/concurrency.state.test.d.ts +6 -0
  399. package/dist/tests/concurrency.state.test.d.ts.map +1 -0
  400. package/dist/tests/concurrency.state.test.js +231 -0
  401. package/dist/tests/concurrency.state.test.js.map +1 -0
  402. package/dist/tests/detection-engine.strict.test.d.ts +6 -0
  403. package/dist/tests/detection-engine.strict.test.d.ts.map +1 -0
  404. package/dist/tests/detection-engine.strict.test.js +323 -0
  405. package/dist/tests/detection-engine.strict.test.js.map +1 -0
  406. package/dist/tests/e2e.system.test.d.ts +7 -0
  407. package/dist/tests/e2e.system.test.d.ts.map +1 -0
  408. package/dist/tests/e2e.system.test.js +189 -0
  409. package/dist/tests/e2e.system.test.js.map +1 -0
  410. package/dist/tests/edge-cases.test.d.ts +6 -0
  411. package/dist/tests/edge-cases.test.d.ts.map +1 -0
  412. package/dist/tests/edge-cases.test.js +357 -0
  413. package/dist/tests/edge-cases.test.js.map +1 -0
  414. package/dist/tests/performance.benchmark.test.d.ts +2 -0
  415. package/dist/tests/performance.benchmark.test.d.ts.map +1 -0
  416. package/dist/tests/performance.benchmark.test.js +24 -0
  417. package/dist/tests/performance.benchmark.test.js.map +1 -0
  418. package/dist/tests/proxy.production.test.d.ts +6 -0
  419. package/dist/tests/proxy.production.test.d.ts.map +1 -0
  420. package/dist/tests/proxy.production.test.js +274 -0
  421. package/dist/tests/proxy.production.test.js.map +1 -0
  422. package/dist/tests/proxy.strict.test.d.ts +6 -0
  423. package/dist/tests/proxy.strict.test.d.ts.map +1 -0
  424. package/dist/tests/proxy.strict.test.js +188 -0
  425. package/dist/tests/proxy.strict.test.js.map +1 -0
  426. package/dist/tests/proxy.test.d.ts +5 -0
  427. package/dist/tests/proxy.test.d.ts.map +1 -0
  428. package/dist/tests/proxy.test.js +61 -0
  429. package/dist/tests/proxy.test.js.map +1 -0
  430. package/dist/tests/roi.scenario.test.d.ts +2 -0
  431. package/dist/tests/roi.scenario.test.d.ts.map +1 -0
  432. package/dist/tests/roi.scenario.test.js +26 -0
  433. package/dist/tests/roi.scenario.test.js.map +1 -0
  434. package/dist/tests/server.contract.test.d.ts +6 -0
  435. package/dist/tests/server.contract.test.d.ts.map +1 -0
  436. package/dist/tests/server.contract.test.js +48 -0
  437. package/dist/tests/server.contract.test.js.map +1 -0
  438. package/dist/tests/tokenCounter.test.d.ts +5 -0
  439. package/dist/tests/tokenCounter.test.d.ts.map +1 -0
  440. package/dist/tests/tokenCounter.test.js +66 -0
  441. package/dist/tests/tokenCounter.test.js.map +1 -0
  442. package/dist/tests/v113/client.test.d.ts +2 -0
  443. package/dist/tests/v113/client.test.d.ts.map +1 -0
  444. package/dist/tests/v113/client.test.js +22 -0
  445. package/dist/tests/v113/client.test.js.map +1 -0
  446. package/dist/tests/v113/executionGuard.test.d.ts +2 -0
  447. package/dist/tests/v113/executionGuard.test.d.ts.map +1 -0
  448. package/dist/tests/v113/executionGuard.test.js +39 -0
  449. package/dist/tests/v113/executionGuard.test.js.map +1 -0
  450. package/dist/token-counter/index.d.ts +2 -0
  451. package/dist/token-counter/index.d.ts.map +1 -0
  452. package/dist/token-counter/index.js +18 -0
  453. package/dist/token-counter/index.js.map +1 -0
  454. package/dist/token-counter/tokenCounter.d.ts +18 -0
  455. package/dist/token-counter/tokenCounter.d.ts.map +1 -0
  456. package/dist/token-counter/tokenCounter.js +91 -0
  457. package/dist/token-counter/tokenCounter.js.map +1 -0
  458. package/dist/trust/ImmutableAudit.d.ts +159 -0
  459. package/dist/trust/ImmutableAudit.d.ts.map +1 -0
  460. package/dist/trust/ImmutableAudit.js +340 -0
  461. package/dist/trust/ImmutableAudit.js.map +1 -0
  462. package/dist/trust/PublicVerificationLedger.d.ts +91 -0
  463. package/dist/trust/PublicVerificationLedger.d.ts.map +1 -0
  464. package/dist/trust/PublicVerificationLedger.js +223 -0
  465. package/dist/trust/PublicVerificationLedger.js.map +1 -0
  466. package/dist/trust/index.d.ts +11 -0
  467. package/dist/trust/index.d.ts.map +1 -0
  468. package/dist/trust/index.js +20 -0
  469. package/dist/trust/index.js.map +1 -0
  470. package/dist/utils/alert.d.ts +13 -0
  471. package/dist/utils/alert.d.ts.map +1 -0
  472. package/dist/utils/alert.js +49 -0
  473. package/dist/utils/alert.js.map +1 -0
  474. package/dist/utils/index.d.ts +2 -0
  475. package/dist/utils/index.d.ts.map +1 -0
  476. package/dist/utils/index.js +18 -0
  477. package/dist/utils/index.js.map +1 -0
  478. package/dist/wrapper/aiFirewall.d.ts +61 -0
  479. package/dist/wrapper/aiFirewall.d.ts.map +1 -0
  480. package/dist/wrapper/aiFirewall.js +117 -0
  481. package/dist/wrapper/aiFirewall.js.map +1 -0
  482. package/dist/wrapper/index.d.ts +3 -0
  483. package/dist/wrapper/index.d.ts.map +1 -0
  484. package/dist/wrapper/index.js +21 -0
  485. package/dist/wrapper/index.js.map +1 -0
  486. package/dist/wrapper/sdk.d.ts +49 -0
  487. package/dist/wrapper/sdk.d.ts.map +1 -0
  488. package/dist/wrapper/sdk.js +140 -0
  489. package/dist/wrapper/sdk.js.map +1 -0
  490. package/package.json +84 -0
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * CONCURRENCY AND STATE CORRECTNESS TESTS
4
+ * Race conditions, parallel requests, persistence sync
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const DetectionEngine_1 = require("../core/DetectionEngine");
11
+ const StateStore_1 = require("../core/StateStore");
12
+ const proxy_1 = require("../proxy");
13
+ const sdk_1 = require("../wrapper/sdk");
14
+ const axios_1 = __importDefault(require("axios"));
15
+ describe('Concurrency and State Correctness Tests', () => {
16
+ let engine;
17
+ let proxy;
18
+ const PROXY_PORT = 3459;
19
+ beforeAll(async () => {
20
+ proxy = new proxy_1.ProxyServer(PROXY_PORT);
21
+ await proxy.start();
22
+ });
23
+ afterAll(async () => {
24
+ await proxy.stop();
25
+ });
26
+ beforeEach(() => {
27
+ engine = DetectionEngine_1.DetectionEngine.getInstance();
28
+ engine.clear();
29
+ proxy.clearRateLimits(); // Clear rate limits between tests
30
+ });
31
+ afterEach(() => {
32
+ engine.clear();
33
+ });
34
+ describe('Parallel Request Handling', () => {
35
+ test('should handle 50 concurrent identical requests correctly', async () => {
36
+ const prompt = 'concurrent test';
37
+ // Fire 50 requests simultaneously
38
+ const promises = Array.from({ length: 50 }, (_, i) => axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: prompt }] }, { validateStatus: () => true }));
39
+ const responses = await Promise.all(promises);
40
+ // All should complete
41
+ expect(responses.every(r => r.status !== undefined)).toBe(true);
42
+ // Check state
43
+ const stats = engine.getStats(1);
44
+ expect(stats.totalRequests).toBe(50);
45
+ // Most should be blocked after loop detection kicks in
46
+ expect(stats.blockedRequests).toBeGreaterThanOrEqual(47);
47
+ });
48
+ test('should handle concurrent different requests without cross-contamination', async () => {
49
+ const promises = Array.from({ length: 20 }, (_, i) => axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: `unique ${i}` }] }, { validateStatus: () => true }));
50
+ const responses = await Promise.all(promises);
51
+ // All 20 unique prompts should complete (200, 403, 401, or 429)
52
+ const allCompleted = responses.every(r => r.status === 200 || r.status === 403 || r.status === 401 || r.status === 429);
53
+ expect(allCompleted).toBe(true);
54
+ // State should reflect 20 requests
55
+ const stats = engine.getStats(1);
56
+ expect(stats.totalRequests).toBe(20);
57
+ // Unique requests may trigger cost spikes due to hardcoded 1000 output tokens in SDK
58
+ });
59
+ test('should handle mixed concurrent safe and dangerous requests', async () => {
60
+ // 10 safe requests + 10 loop-triggering requests
61
+ const safePromises = Array.from({ length: 10 }, (_, i) => axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: `safe ${i}` }] }, { validateStatus: () => true }));
62
+ const loopPromises = Array.from({ length: 10 }, () => axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: 'loop trigger' }] }, { validateStatus: () => true }));
63
+ const [safeResponses, loopResponses] = await Promise.all([
64
+ Promise.all(safePromises),
65
+ Promise.all(loopPromises),
66
+ ]);
67
+ // All should complete
68
+ expect(safeResponses.every(r => r.status !== undefined)).toBe(true);
69
+ expect(loopResponses.every(r => r.status !== undefined)).toBe(true);
70
+ // Check state
71
+ const stats = engine.getStats(1);
72
+ expect(stats.totalRequests).toBe(20);
73
+ });
74
+ });
75
+ describe('State Consistency Under Load', () => {
76
+ test('stats should be consistent after 100 rapid requests', async () => {
77
+ const requests = [];
78
+ for (let i = 0; i < 100; i++) {
79
+ requests.push({
80
+ model: 'gpt-3.5-turbo',
81
+ messages: [{ role: 'user', content: `load ${i % 10}` }], // 10 groups of duplicates
82
+ });
83
+ }
84
+ // Fire all requests
85
+ const promises = requests.map(req => axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, req, { validateStatus: () => true }));
86
+ await Promise.all(promises);
87
+ // Verify state is consistent
88
+ const stats = engine.getStats(1);
89
+ const blocked = engine.getBlocked(100);
90
+ // Due to rate limiting (60/min), not all 100 may be recorded
91
+ // Just verify consistency between stats and blocked list
92
+ expect(stats.totalRequests).toBeGreaterThan(0);
93
+ expect(blocked.length).toBe(stats.blockedRequests);
94
+ // Verify cost calculations are correct
95
+ const records = StateStore_1.stateStore.getAllRecent(3600000);
96
+ const calculatedTotalCost = records.reduce((sum, r) => sum + r.estimatedCost, 0);
97
+ expect(stats.totalCost).toBe(calculatedTotalCost);
98
+ });
99
+ test('prompt hashes should be deterministic and consistent', async () => {
100
+ const prompt = 'hash consistency test';
101
+ // Calculate hash multiple times
102
+ const hashes = [];
103
+ for (let i = 0; i < 10; i++) {
104
+ hashes.push(StateStore_1.stateStore.generateHash(prompt));
105
+ }
106
+ // All hashes should be identical
107
+ const uniqueHashes = new Set(hashes);
108
+ expect(uniqueHashes.size).toBe(1);
109
+ // Should be 64 character hex string (SHA-256)
110
+ const hash = hashes[0];
111
+ expect(hash).toHaveLength(64);
112
+ expect(hash).toMatch(/^[a-f0-9]{64}$/);
113
+ });
114
+ });
115
+ describe('Memory vs Persistence Sync', () => {
116
+ test('state in memory should match persisted state', async () => {
117
+ // Add records
118
+ for (let i = 0; i < 5; i++) {
119
+ engine.analyze({
120
+ model: 'gpt-4',
121
+ prompt: `sync test ${i}`,
122
+ estimatedCost: 0.01,
123
+ });
124
+ }
125
+ // Get memory stats
126
+ const memoryStats = StateStore_1.stateStore.getStats(1);
127
+ // Get records directly from store
128
+ const records = StateStore_1.stateStore.getAllRecent(3600000);
129
+ // Should match
130
+ expect(memoryStats.totalRequests).toBe(records.length);
131
+ // Verify specific fields
132
+ const blockedFromRecords = records.filter(r => r.wasBlocked).length;
133
+ expect(memoryStats.blockedRequests).toBe(blockedFromRecords);
134
+ });
135
+ test('recent records should be in correct time order', async () => {
136
+ // Add records with small delays
137
+ const timestamps = [];
138
+ for (let i = 0; i < 5; i++) {
139
+ engine.analyze({
140
+ model: 'gpt-4',
141
+ prompt: `order test ${i}`,
142
+ estimatedCost: 0.01,
143
+ });
144
+ timestamps.push(Date.now());
145
+ await new Promise(r => setTimeout(r, 10)); // Small delay
146
+ }
147
+ const records = StateStore_1.stateStore.getAllRecent(3600000);
148
+ // Should be sorted by timestamp descending (most recent first)
149
+ for (let i = 0; i < records.length - 1; i++) {
150
+ expect(records[i].timestamp).toBeGreaterThanOrEqual(records[i + 1].timestamp);
151
+ }
152
+ });
153
+ });
154
+ describe('Race Condition Prevention', () => {
155
+ test('concurrent duplicate detections should be consistent', async () => {
156
+ const prompt = 'race condition test';
157
+ // First, prime the state
158
+ engine.analyze({ model: 'gpt-4', prompt, estimatedCost: 0.01 });
159
+ // Then fire 10 concurrent duplicates
160
+ const promises = Array.from({ length: 10 }, () => Promise.resolve(engine.analyze({ model: 'gpt-4', prompt, estimatedCost: 0.01 })));
161
+ const results = await Promise.all(promises);
162
+ // All should detect danger (duplicate or loop depending on concurrent count)
163
+ const allDetectedDanger = results.every(r => r.category === 'duplicate' || r.category === 'loop');
164
+ expect(allDetectedDanger).toBe(true);
165
+ });
166
+ test('state updates should be atomic', async () => {
167
+ const prompt = 'atomic test';
168
+ // Fire requests that will update same state
169
+ const promises = Array.from({ length: 20 }, () => axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, { model: 'gpt-3.5-turbo', messages: [{ role: 'user', content: prompt }] }, { validateStatus: () => true }));
170
+ await Promise.all(promises);
171
+ // Check state integrity
172
+ const stats = engine.getStats(1);
173
+ const records = StateStore_1.stateStore.getAllRecent(3600000);
174
+ // Should have exactly 20 records, no more no less
175
+ expect(stats.totalRequests).toBe(20);
176
+ expect(records.length).toBe(20);
177
+ });
178
+ });
179
+ describe('SDK Concurrency', () => {
180
+ test('SDK should handle concurrent calls safely', async () => {
181
+ const sdk = new sdk_1.AIExecutionFirewall();
182
+ const promises = Array.from({ length: 10 }, (_, i) => sdk.call(() => Promise.resolve({ result: i }), { model: 'gpt-4', prompt: `sdk concurrent ${i}` }));
183
+ const results = await Promise.all(promises);
184
+ // All should complete successfully
185
+ expect(results.every(r => r.success === true)).toBe(true);
186
+ expect(results.every(r => r.blocked === false)).toBe(true);
187
+ // State should show 10 requests
188
+ const stats = engine.getStats(1);
189
+ expect(stats.totalRequests).toBe(10);
190
+ });
191
+ });
192
+ describe('Cross-Interface State Race Conditions', () => {
193
+ test('SDK and Proxy concurrent access should be safe', async () => {
194
+ const sdk = new sdk_1.AIExecutionFirewall();
195
+ const prompt = 'cross interface race';
196
+ // Concurrent SDK and Proxy requests
197
+ const sdkPromise = sdk.call(() => Promise.resolve({}), { model: 'gpt-4', prompt });
198
+ const proxyPromise = axios_1.default.post(`http://localhost:${PROXY_PORT}/v1/chat/completions`, { model: 'gpt-4', messages: [{ role: 'user', content: prompt }] }, { validateStatus: () => true });
199
+ await Promise.all([sdkPromise, proxyPromise]);
200
+ // State should be consistent
201
+ const stats = engine.getStats(1);
202
+ expect(stats.totalRequests).toBe(2);
203
+ });
204
+ });
205
+ describe('Clear/Reset Operations', () => {
206
+ test('clear should immediately reset all state', async () => {
207
+ // Add some state
208
+ for (let i = 0; i < 5; i++) {
209
+ engine.analyze({ model: 'gpt-4', prompt: `clear ${i}`, estimatedCost: 0.01 });
210
+ }
211
+ // Verify state exists
212
+ expect(engine.getStats(1).totalRequests).toBe(5);
213
+ // Clear
214
+ engine.clear();
215
+ // Verify cleared
216
+ const stats = engine.getStats(1);
217
+ expect(stats.totalRequests).toBe(0);
218
+ expect(stats.blockedRequests).toBe(0);
219
+ expect(stats.totalCost).toBe(0);
220
+ });
221
+ test('reset should restore initial state', async () => {
222
+ // Add state
223
+ engine.analyze({ model: 'gpt-4', prompt: 'reset test', estimatedCost: 0.01 });
224
+ // Reset
225
+ engine.reset();
226
+ // Should be clean
227
+ expect(engine.getStats(1).totalRequests).toBe(0);
228
+ });
229
+ });
230
+ });
231
+ //# sourceMappingURL=concurrency.state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.state.test.js","sourceRoot":"","sources":["../../src/tests/concurrency.state.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * STRICT BEHAVIORAL TESTS - DetectionEngine
3
+ * No existence checks. Exact output validation only.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=detection-engine.strict.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection-engine.strict.test.d.ts","sourceRoot":"","sources":["../../src/tests/detection-engine.strict.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ /**
3
+ * STRICT BEHAVIORAL TESTS - DetectionEngine
4
+ * No existence checks. Exact output validation only.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const DetectionEngine_1 = require("../core/DetectionEngine");
8
+ describe('DetectionEngine - Strict Behavioral Tests', () => {
9
+ let engine;
10
+ beforeEach(() => {
11
+ engine = DetectionEngine_1.DetectionEngine.getInstance();
12
+ engine.clear();
13
+ });
14
+ afterEach(() => {
15
+ engine.clear();
16
+ });
17
+ describe('Input Validation', () => {
18
+ test('should block empty prompt with exact error', () => {
19
+ const result = engine.analyze({
20
+ model: 'gpt-4',
21
+ prompt: '',
22
+ estimatedCost: 0.01,
23
+ });
24
+ expect(result.decision).toBe('block');
25
+ expect(result.dangerScore).toBe(100);
26
+ expect(result.category).toBe('invalid');
27
+ expect(result.reason).toBe('Invalid prompt: must be a non-empty string');
28
+ expect(result.metadata.promptHash).toBe('');
29
+ expect(result.metadata.duplicateCount).toBe(0);
30
+ expect(result.metadata.loopCount).toBe(0);
31
+ expect(result.metadata.estimatedCost).toBe(0);
32
+ });
33
+ test('should block whitespace-only prompt', () => {
34
+ const result = engine.analyze({
35
+ model: 'gpt-4',
36
+ prompt: ' ',
37
+ estimatedCost: 0.01,
38
+ });
39
+ expect(result.decision).toBe('block');
40
+ expect(result.dangerScore).toBe(100);
41
+ expect(result.category).toBe('invalid');
42
+ expect(result.reason).toBe('Invalid prompt: must be a non-empty string');
43
+ });
44
+ test('should block negative cost', () => {
45
+ const result = engine.analyze({
46
+ model: 'gpt-4',
47
+ prompt: 'valid prompt',
48
+ estimatedCost: -0.01,
49
+ });
50
+ expect(result.decision).toBe('block');
51
+ expect(result.dangerScore).toBe(100);
52
+ expect(result.category).toBe('invalid');
53
+ expect(result.reason).toBe('Invalid cost: must be a non-negative number');
54
+ });
55
+ test('should allow valid request', () => {
56
+ const result = engine.analyze({
57
+ model: 'gpt-4',
58
+ prompt: 'valid prompt',
59
+ estimatedCost: 0.01,
60
+ });
61
+ expect(result.decision).toBe('allow');
62
+ expect(result.dangerScore).toBe(0);
63
+ expect(result.category).toBe('safe');
64
+ expect(result.reason).toBe('Request is safe');
65
+ expect(result.metadata.loopCount).toBe(0);
66
+ expect(result.metadata.duplicateCount).toBe(0);
67
+ });
68
+ });
69
+ describe('Loop Detection', () => {
70
+ test('should detect runaway loop after 3 identical requests in 30s', () => {
71
+ const input = {
72
+ model: 'gpt-4',
73
+ prompt: 'loop test prompt',
74
+ estimatedCost: 0.01,
75
+ };
76
+ // First request - safe
77
+ const r1 = engine.analyze(input);
78
+ expect(r1.decision).toBe('allow');
79
+ expect(r1.metadata.loopCount).toBe(0);
80
+ // Second request - duplicate warning (first duplicate)
81
+ const r2 = engine.analyze(input);
82
+ expect(r2.decision).toBe('warn');
83
+ expect(r2.category).toBe('duplicate');
84
+ expect(r2.metadata.loopCount).toBe(1);
85
+ // Third request - KILL SWITCH
86
+ const r3 = engine.analyze(input);
87
+ expect(r3.decision).toBe('block');
88
+ expect(r3.dangerScore).toBe(93); // 90 + 3*1
89
+ expect(r3.category).toBe('loop');
90
+ expect(r3.metadata.loopCount).toBe(3);
91
+ expect(r3.reason).toBe('🔴 KILL SWITCH: RUNAWAY LOOP - 3 identical requests in 30 seconds');
92
+ });
93
+ test('should escalate danger score with more loop iterations', () => {
94
+ const input = {
95
+ model: 'gpt-4',
96
+ prompt: 'escalating loop',
97
+ estimatedCost: 0.01,
98
+ };
99
+ // Trigger initial loop detection
100
+ engine.analyze(input);
101
+ engine.analyze(input);
102
+ engine.analyze(input);
103
+ // 4th request - higher danger score
104
+ const r4 = engine.analyze(input);
105
+ expect(r4.dangerScore).toBe(96); // 90 + 3*2
106
+ expect(r4.metadata.loopCount).toBe(4);
107
+ // 5th request - even higher
108
+ const r5 = engine.analyze(input);
109
+ expect(r5.dangerScore).toBe(99); // 90 + 3*3
110
+ // 6th request - capped at 100
111
+ const r6 = engine.analyze(input);
112
+ expect(r6.dangerScore).toBe(100); // capped
113
+ });
114
+ });
115
+ describe('Duplicate Detection', () => {
116
+ test('should detect exact duplicate within 1 hour window', () => {
117
+ const input = {
118
+ model: 'gpt-4',
119
+ prompt: 'duplicate test prompt',
120
+ estimatedCost: 0.01,
121
+ };
122
+ // First request - safe, recorded
123
+ const r1 = engine.analyze(input);
124
+ expect(r1.decision).toBe('allow');
125
+ expect(r1.category).toBe('safe');
126
+ // Second request - duplicate detected (first duplicate)
127
+ const r2 = engine.analyze(input);
128
+ expect(r2.decision).toBe('warn');
129
+ expect(r2.category).toBe('duplicate');
130
+ // Third request - loop triggers (3 total, threshold is 3)
131
+ const r3 = engine.analyze(input);
132
+ expect(r3.decision).toBe('block');
133
+ expect(r3.category).toBe('loop');
134
+ expect(r3.dangerScore).toBe(93); // 90 + (3-2)*3
135
+ expect(r3.metadata.loopCount).toBe(3);
136
+ });
137
+ test('should escalate duplicate danger with multiple occurrences', () => {
138
+ const input = {
139
+ model: 'gpt-4',
140
+ prompt: 'multiple duplicates',
141
+ estimatedCost: 0.01,
142
+ };
143
+ // Record requests (r1 safe, r2 duplicate, r3 loop kills it)
144
+ const r1 = engine.analyze(input);
145
+ expect(r1.decision).toBe('allow');
146
+ expect(r1.category).toBe('safe');
147
+ const r2 = engine.analyze(input);
148
+ expect(r2.decision).toBe('warn');
149
+ expect(r2.category).toBe('duplicate');
150
+ expect(r2.dangerScore).toBe(40); // 30 + 1*10
151
+ // r3 would be loop - test only safe/duplicate behavior
152
+ });
153
+ });
154
+ describe('Cost Spike Detection', () => {
155
+ test('should detect cost at exactly $0.05 threshold', () => {
156
+ const result = engine.analyze({
157
+ model: 'gpt-4',
158
+ prompt: 'cost spike test',
159
+ estimatedCost: 0.05,
160
+ });
161
+ expect(result.decision).toBe('warn');
162
+ expect(result.category).toBe('spike');
163
+ expect(result.dangerScore).toBe(30); // base score
164
+ expect(result.reason).toBe('💸 COST SPIKE: Single request costs $0.05');
165
+ });
166
+ test('should calculate correct danger score for $0.10 cost', () => {
167
+ const result = engine.analyze({
168
+ model: 'gpt-4',
169
+ prompt: 'higher cost',
170
+ estimatedCost: 0.10,
171
+ });
172
+ expect(result.category).toBe('spike');
173
+ expect(result.dangerScore).toBe(32); // 30 + (0.10-0.05)*50 = 32.5 -> 32 (floored)
174
+ });
175
+ test('should cap cost spike at 100', () => {
176
+ const result = engine.analyze({
177
+ model: 'gpt-4',
178
+ prompt: 'very expensive',
179
+ estimatedCost: 2.00, // $2.00
180
+ });
181
+ expect(result.dangerScore).toBe(100); // capped
182
+ expect(result.decision).toBe('block'); // 100 >= 90 threshold
183
+ });
184
+ });
185
+ describe('Context Explosion Detection', () => {
186
+ test('should detect context 5x larger than prompt', () => {
187
+ const prompt = 'short'; // 5 chars
188
+ const context = 'a'.repeat(25); // 25 chars = 5x
189
+ const result = engine.analyze({
190
+ model: 'gpt-4',
191
+ prompt,
192
+ estimatedCost: 0.01,
193
+ context,
194
+ });
195
+ expect(result.decision).toBe('warn');
196
+ expect(result.category).toBe('context');
197
+ expect(result.metadata.contextRatio).toBe(5); // 25/5
198
+ });
199
+ test('should detect severe context explosion at 10x', () => {
200
+ const prompt = 'test';
201
+ const context = 'b'.repeat(100); // 100 chars
202
+ const result = engine.analyze({
203
+ model: 'gpt-4',
204
+ prompt,
205
+ estimatedCost: 0.01,
206
+ context,
207
+ });
208
+ expect(result.category).toBe('context');
209
+ expect(result.metadata.contextRatio).toBe(25); // 100/4
210
+ expect(result.reason).toBe('💸 CONTEXT EXPLOSION: Context is 25.00x larger than prompt');
211
+ });
212
+ });
213
+ describe('Fuzzy Duplicate Detection', () => {
214
+ test('should detect 70% similar prompts', () => {
215
+ // First request
216
+ engine.analyze({
217
+ model: 'gpt-4',
218
+ prompt: 'The quick brown fox jumps over the lazy dog',
219
+ estimatedCost: 0.01,
220
+ });
221
+ // 70% similar prompt
222
+ const result = engine.analyze({
223
+ model: 'gpt-4',
224
+ prompt: 'The quick brown fox jumps over the lazy cat',
225
+ estimatedCost: 0.01,
226
+ });
227
+ expect(result.category).toBe('fuzzy_duplicate');
228
+ expect(result.metadata.similarity).toBeGreaterThanOrEqual(0.7);
229
+ });
230
+ test('should not flag 50% similar prompts', () => {
231
+ // First request
232
+ engine.analyze({
233
+ model: 'gpt-4',
234
+ prompt: 'The quick brown fox jumps over the lazy dog',
235
+ estimatedCost: 0.01,
236
+ });
237
+ // 50% similar (different enough)
238
+ const result = engine.analyze({
239
+ model: 'gpt-4',
240
+ prompt: 'The quick brown',
241
+ estimatedCost: 0.01,
242
+ });
243
+ expect(result.category).toBe('safe');
244
+ });
245
+ });
246
+ describe('Trust Mode Behavior', () => {
247
+ test('monitor mode should allow all non-kill-switch requests', () => {
248
+ // Setup cost spike (not loop) to test monitor mode
249
+ const result = engine.analyze({
250
+ model: 'gpt-4',
251
+ prompt: 'trust test',
252
+ estimatedCost: 0.10, // cost spike
253
+ trustMode: 'monitor',
254
+ });
255
+ expect(result.decision).toBe('allow');
256
+ expect(result.dangerScore).toBeGreaterThan(0); // Cost spike detected
257
+ });
258
+ test('block mode should block any danger > 0', () => {
259
+ // Setup 2 duplicates to trigger detection (need > 1 existing)
260
+ engine.analyze({ model: 'gpt-4', prompt: 'block test', estimatedCost: 0.01 });
261
+ engine.analyze({ model: 'gpt-4', prompt: 'block test', estimatedCost: 0.01 });
262
+ const result = engine.analyze({
263
+ model: 'gpt-4',
264
+ prompt: 'block test',
265
+ estimatedCost: 0.01,
266
+ trustMode: 'block',
267
+ });
268
+ expect(result.decision).toBe('block');
269
+ });
270
+ });
271
+ describe('Override Behavior', () => {
272
+ test('override should allow even kill-switch triggers', () => {
273
+ // Trigger loop detection
274
+ const input = {
275
+ model: 'gpt-4',
276
+ prompt: 'override loop test',
277
+ estimatedCost: 0.01,
278
+ };
279
+ engine.analyze(input);
280
+ engine.analyze(input);
281
+ engine.analyze(input); // This would trigger kill switch
282
+ // With override
283
+ const result = engine.analyze({
284
+ ...input,
285
+ override: true,
286
+ });
287
+ expect(result.decision).toBe('allow');
288
+ expect(result.dangerScore).toBe(0);
289
+ expect(result.reason).toBe('Override enabled - request allowed');
290
+ });
291
+ });
292
+ describe('State Persistence', () => {
293
+ test('should persist blocked requests to state', () => {
294
+ engine.analyze({
295
+ model: 'gpt-4',
296
+ prompt: 'persist test',
297
+ estimatedCost: 0.05, // cost spike
298
+ });
299
+ const stats = engine.getStats(1);
300
+ expect(stats.totalRequests).toBe(1);
301
+ expect(stats.warnedRequests).toBe(1);
302
+ expect(stats.totalCost).toBe(0.05);
303
+ });
304
+ test('should return exact blocked request list', () => {
305
+ // Create blocked request
306
+ engine.analyze({
307
+ model: 'gpt-4',
308
+ prompt: 'blocked 1',
309
+ estimatedCost: 2.00, // high cost = block
310
+ });
311
+ engine.analyze({
312
+ model: 'gpt-4',
313
+ prompt: 'safe request',
314
+ estimatedCost: 0.01,
315
+ });
316
+ const blocked = engine.getBlocked(10);
317
+ expect(blocked.length).toBe(1);
318
+ expect(blocked[0].prompt).toBe('blocked 1');
319
+ expect(blocked[0].wasBlocked).toBe(true);
320
+ });
321
+ });
322
+ });
323
+ //# sourceMappingURL=detection-engine.strict.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection-engine.strict.test.js","sourceRoot":"","sources":["../../src/tests/detection-engine.strict.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * END-TO-END SYSTEM TESTS
3
+ * Full flow: SDK → DetectionEngine → Logger → State → Proxy → CLI
4
+ * Validates shared state consistency across all layers
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=e2e.system.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.system.test.d.ts","sourceRoot":"","sources":["../../src/tests/e2e.system.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}