@salimassili/ai-costguard 1.1.7 → 1.1.8

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 (494) hide show
  1. package/README.md +97 -38
  2. package/dist/core/CostGuard.d.ts +27 -0
  3. package/dist/core/CostGuard.d.ts.map +1 -0
  4. package/dist/core/CostGuard.js +191 -0
  5. package/dist/core/CostGuard.js.map +1 -0
  6. package/dist/core/types.d.ts +28 -23
  7. package/dist/core/types.d.ts.map +1 -1
  8. package/dist/core/types.js +4 -2
  9. package/dist/core/types.js.map +1 -1
  10. package/dist/index.d.ts +14 -33
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +13 -69
  13. package/dist/index.js.map +1 -1
  14. package/package.json +27 -64
  15. package/dist/aecl/ExecutionInterceptor.d.ts +0 -111
  16. package/dist/aecl/ExecutionInterceptor.d.ts.map +0 -1
  17. package/dist/aecl/ExecutionInterceptor.js +0 -280
  18. package/dist/aecl/ExecutionInterceptor.js.map +0 -1
  19. package/dist/aecl/ExecutionMemory.d.ts +0 -103
  20. package/dist/aecl/ExecutionMemory.d.ts.map +0 -1
  21. package/dist/aecl/ExecutionMemory.js +0 -164
  22. package/dist/aecl/ExecutionMemory.js.map +0 -1
  23. package/dist/aecl/PolicyEngine.d.ts +0 -77
  24. package/dist/aecl/PolicyEngine.d.ts.map +0 -1
  25. package/dist/aecl/PolicyEngine.js +0 -170
  26. package/dist/aecl/PolicyEngine.js.map +0 -1
  27. package/dist/aecl/ROITelemetry.d.ts +0 -110
  28. package/dist/aecl/ROITelemetry.d.ts.map +0 -1
  29. package/dist/aecl/ROITelemetry.js +0 -211
  30. package/dist/aecl/ROITelemetry.js.map +0 -1
  31. package/dist/aecl/RiskEngine.d.ts +0 -90
  32. package/dist/aecl/RiskEngine.d.ts.map +0 -1
  33. package/dist/aecl/RiskEngine.js +0 -207
  34. package/dist/aecl/RiskEngine.js.map +0 -1
  35. package/dist/aecl/index.d.ts +0 -76
  36. package/dist/aecl/index.d.ts.map +0 -1
  37. package/dist/aecl/index.js +0 -111
  38. package/dist/aecl/index.js.map +0 -1
  39. package/dist/aerl/ExecutionGraph.d.ts +0 -123
  40. package/dist/aerl/ExecutionGraph.d.ts.map +0 -1
  41. package/dist/aerl/ExecutionGraph.js +0 -289
  42. package/dist/aerl/ExecutionGraph.js.map +0 -1
  43. package/dist/aerl/ExecutionInterceptor.d.ts +0 -94
  44. package/dist/aerl/ExecutionInterceptor.d.ts.map +0 -1
  45. package/dist/aerl/ExecutionInterceptor.js +0 -246
  46. package/dist/aerl/ExecutionInterceptor.js.map +0 -1
  47. package/dist/aerl/ExecutionMemory.d.ts +0 -138
  48. package/dist/aerl/ExecutionMemory.d.ts.map +0 -1
  49. package/dist/aerl/ExecutionMemory.js +0 -284
  50. package/dist/aerl/ExecutionMemory.js.map +0 -1
  51. package/dist/aerl/FailurePrediction.d.ts +0 -71
  52. package/dist/aerl/FailurePrediction.d.ts.map +0 -1
  53. package/dist/aerl/FailurePrediction.js +0 -204
  54. package/dist/aerl/FailurePrediction.js.map +0 -1
  55. package/dist/aerl/RecoveryEngine.d.ts +0 -74
  56. package/dist/aerl/RecoveryEngine.d.ts.map +0 -1
  57. package/dist/aerl/RecoveryEngine.js +0 -194
  58. package/dist/aerl/RecoveryEngine.js.map +0 -1
  59. package/dist/aerl/ReliabilityEngine.d.ts +0 -74
  60. package/dist/aerl/ReliabilityEngine.d.ts.map +0 -1
  61. package/dist/aerl/ReliabilityEngine.js +0 -205
  62. package/dist/aerl/ReliabilityEngine.js.map +0 -1
  63. package/dist/aerl/ReliabilityTelemetry.d.ts +0 -118
  64. package/dist/aerl/ReliabilityTelemetry.d.ts.map +0 -1
  65. package/dist/aerl/ReliabilityTelemetry.js +0 -247
  66. package/dist/aerl/ReliabilityTelemetry.js.map +0 -1
  67. package/dist/aerl/index.d.ts +0 -170
  68. package/dist/aerl/index.d.ts.map +0 -1
  69. package/dist/aerl/index.js +0 -223
  70. package/dist/aerl/index.js.map +0 -1
  71. package/dist/ambient/AmbientProtection.d.ts +0 -79
  72. package/dist/ambient/AmbientProtection.d.ts.map +0 -1
  73. package/dist/ambient/AmbientProtection.js +0 -251
  74. package/dist/ambient/AmbientProtection.js.map +0 -1
  75. package/dist/bin/start.d.ts +0 -14
  76. package/dist/bin/start.d.ts.map +0 -1
  77. package/dist/bin/start.js +0 -54
  78. package/dist/bin/start.js.map +0 -1
  79. package/dist/cli/index.d.ts +0 -3
  80. package/dist/cli/index.d.ts.map +0 -1
  81. package/dist/cli/index.js +0 -64
  82. package/dist/cli/index.js.map +0 -1
  83. package/dist/cli/outputContract.d.ts +0 -19
  84. package/dist/cli/outputContract.d.ts.map +0 -1
  85. package/dist/cli/outputContract.js +0 -54
  86. package/dist/cli/outputContract.js.map +0 -1
  87. package/dist/cli/storage.d.ts +0 -61
  88. package/dist/cli/storage.d.ts.map +0 -1
  89. package/dist/cli/storage.js +0 -143
  90. package/dist/cli/storage.js.map +0 -1
  91. package/dist/client.d.ts +0 -29
  92. package/dist/client.d.ts.map +0 -1
  93. package/dist/client.js +0 -58
  94. package/dist/client.js.map +0 -1
  95. package/dist/config/constants.d.ts +0 -109
  96. package/dist/config/constants.d.ts.map +0 -1
  97. package/dist/config/constants.js +0 -151
  98. package/dist/config/constants.js.map +0 -1
  99. package/dist/config/index.d.ts +0 -5
  100. package/dist/config/index.d.ts.map +0 -1
  101. package/dist/config/index.js +0 -21
  102. package/dist/config/index.js.map +0 -1
  103. package/dist/config/pricing.d.ts +0 -12
  104. package/dist/config/pricing.d.ts.map +0 -1
  105. package/dist/config/pricing.js +0 -45
  106. package/dist/config/pricing.js.map +0 -1
  107. package/dist/config/productionConfig.d.ts +0 -8
  108. package/dist/config/productionConfig.d.ts.map +0 -1
  109. package/dist/config/productionConfig.js +0 -21
  110. package/dist/config/productionConfig.js.map +0 -1
  111. package/dist/config/userConfig.d.ts +0 -31
  112. package/dist/config/userConfig.d.ts.map +0 -1
  113. package/dist/config/userConfig.js +0 -116
  114. package/dist/config/userConfig.js.map +0 -1
  115. package/dist/controlPlane/configServer.d.ts +0 -7
  116. package/dist/controlPlane/configServer.d.ts.map +0 -1
  117. package/dist/controlPlane/configServer.js +0 -47
  118. package/dist/controlPlane/configServer.js.map +0 -1
  119. package/dist/core/AgentBehaviorGraph.d.ts +0 -163
  120. package/dist/core/AgentBehaviorGraph.d.ts.map +0 -1
  121. package/dist/core/AgentBehaviorGraph.js +0 -341
  122. package/dist/core/AgentBehaviorGraph.js.map +0 -1
  123. package/dist/core/AlertManager.d.ts +0 -19
  124. package/dist/core/AlertManager.d.ts.map +0 -1
  125. package/dist/core/AlertManager.js +0 -64
  126. package/dist/core/AlertManager.js.map +0 -1
  127. package/dist/core/AuditTrail.d.ts +0 -107
  128. package/dist/core/AuditTrail.d.ts.map +0 -1
  129. package/dist/core/AuditTrail.js +0 -256
  130. package/dist/core/AuditTrail.js.map +0 -1
  131. package/dist/core/CostLedger.d.ts +0 -135
  132. package/dist/core/CostLedger.d.ts.map +0 -1
  133. package/dist/core/CostLedger.js +0 -224
  134. package/dist/core/CostLedger.js.map +0 -1
  135. package/dist/core/CostPredictionEngine.d.ts +0 -110
  136. package/dist/core/CostPredictionEngine.d.ts.map +0 -1
  137. package/dist/core/CostPredictionEngine.js +0 -225
  138. package/dist/core/CostPredictionEngine.js.map +0 -1
  139. package/dist/core/CostTruthEngine.d.ts +0 -108
  140. package/dist/core/CostTruthEngine.d.ts.map +0 -1
  141. package/dist/core/CostTruthEngine.js +0 -170
  142. package/dist/core/CostTruthEngine.js.map +0 -1
  143. package/dist/core/DetectionEngine.d.ts +0 -147
  144. package/dist/core/DetectionEngine.d.ts.map +0 -1
  145. package/dist/core/DetectionEngine.js +0 -429
  146. package/dist/core/DetectionEngine.js.map +0 -1
  147. package/dist/core/ExecutionInterceptor.d.ts +0 -135
  148. package/dist/core/ExecutionInterceptor.d.ts.map +0 -1
  149. package/dist/core/ExecutionInterceptor.js +0 -285
  150. package/dist/core/ExecutionInterceptor.js.map +0 -1
  151. package/dist/core/ExplainabilityLayer.d.ts +0 -109
  152. package/dist/core/ExplainabilityLayer.d.ts.map +0 -1
  153. package/dist/core/ExplainabilityLayer.js +0 -277
  154. package/dist/core/ExplainabilityLayer.js.map +0 -1
  155. package/dist/core/LearningSystem.d.ts +0 -124
  156. package/dist/core/LearningSystem.d.ts.map +0 -1
  157. package/dist/core/LearningSystem.js +0 -294
  158. package/dist/core/LearningSystem.js.map +0 -1
  159. package/dist/core/Logger.d.ts +0 -122
  160. package/dist/core/Logger.d.ts.map +0 -1
  161. package/dist/core/Logger.js +0 -233
  162. package/dist/core/Logger.js.map +0 -1
  163. package/dist/core/PolicyEngine.d.ts +0 -148
  164. package/dist/core/PolicyEngine.d.ts.map +0 -1
  165. package/dist/core/PolicyEngine.js +0 -336
  166. package/dist/core/PolicyEngine.js.map +0 -1
  167. package/dist/core/PricingConfig.d.ts +0 -55
  168. package/dist/core/PricingConfig.d.ts.map +0 -1
  169. package/dist/core/PricingConfig.js +0 -132
  170. package/dist/core/PricingConfig.js.map +0 -1
  171. package/dist/core/SessionStats.d.ts +0 -101
  172. package/dist/core/SessionStats.d.ts.map +0 -1
  173. package/dist/core/SessionStats.js +0 -261
  174. package/dist/core/SessionStats.js.map +0 -1
  175. package/dist/core/StateStore.d.ts +0 -100
  176. package/dist/core/StateStore.d.ts.map +0 -1
  177. package/dist/core/StateStore.js +0 -336
  178. package/dist/core/StateStore.js.map +0 -1
  179. package/dist/core/index.d.ts +0 -3
  180. package/dist/core/index.d.ts.map +0 -1
  181. package/dist/core/index.js +0 -19
  182. package/dist/core/index.js.map +0 -1
  183. package/dist/cost-guard.d.ts +0 -41
  184. package/dist/cost-guard.d.ts.map +0 -1
  185. package/dist/cost-guard.js +0 -274
  186. package/dist/cost-guard.js.map +0 -1
  187. package/dist/dashboard/roiDashboard.d.ts +0 -12
  188. package/dist/dashboard/roiDashboard.d.ts.map +0 -1
  189. package/dist/dashboard/roiDashboard.js +0 -28
  190. package/dist/dashboard/roiDashboard.js.map +0 -1
  191. package/dist/demo/compareExecution.d.ts +0 -9
  192. package/dist/demo/compareExecution.d.ts.map +0 -1
  193. package/dist/demo/compareExecution.js +0 -43
  194. package/dist/demo/compareExecution.js.map +0 -1
  195. package/dist/demo/demoRunner.d.ts +0 -16
  196. package/dist/demo/demoRunner.d.ts.map +0 -1
  197. package/dist/demo/demoRunner.js +0 -73
  198. package/dist/demo/demoRunner.js.map +0 -1
  199. package/dist/firewall/costEstimator.d.ts +0 -3
  200. package/dist/firewall/costEstimator.d.ts.map +0 -1
  201. package/dist/firewall/costEstimator.js +0 -22
  202. package/dist/firewall/costEstimator.js.map +0 -1
  203. package/dist/firewall/executionGuard.d.ts +0 -18
  204. package/dist/firewall/executionGuard.d.ts.map +0 -1
  205. package/dist/firewall/executionGuard.js +0 -80
  206. package/dist/firewall/executionGuard.js.map +0 -1
  207. package/dist/firewall/loopDetector.d.ts +0 -13
  208. package/dist/firewall/loopDetector.d.ts.map +0 -1
  209. package/dist/firewall/loopDetector.js +0 -24
  210. package/dist/firewall/loopDetector.js.map +0 -1
  211. package/dist/firewall/policy.d.ts +0 -4
  212. package/dist/firewall/policy.d.ts.map +0 -1
  213. package/dist/firewall/policy.js +0 -16
  214. package/dist/firewall/policy.js.map +0 -1
  215. package/dist/firewall/types.d.ts +0 -38
  216. package/dist/firewall/types.d.ts.map +0 -1
  217. package/dist/firewall/types.js +0 -3
  218. package/dist/firewall/types.js.map +0 -1
  219. package/dist/logger/console.d.ts +0 -27
  220. package/dist/logger/console.d.ts.map +0 -1
  221. package/dist/logger/console.js +0 -68
  222. package/dist/logger/console.js.map +0 -1
  223. package/dist/logger/database.d.ts +0 -40
  224. package/dist/logger/database.d.ts.map +0 -1
  225. package/dist/logger/database.js +0 -127
  226. package/dist/logger/database.js.map +0 -1
  227. package/dist/logger/index.d.ts +0 -3
  228. package/dist/logger/index.d.ts.map +0 -1
  229. package/dist/logger/index.js +0 -11
  230. package/dist/logger/index.js.map +0 -1
  231. package/dist/loop-shield.d.ts +0 -48
  232. package/dist/loop-shield.d.ts.map +0 -1
  233. package/dist/loop-shield.js +0 -436
  234. package/dist/loop-shield.js.map +0 -1
  235. package/dist/metrics/BusinessMetricsEngine.d.ts +0 -109
  236. package/dist/metrics/BusinessMetricsEngine.d.ts.map +0 -1
  237. package/dist/metrics/BusinessMetricsEngine.js +0 -222
  238. package/dist/metrics/BusinessMetricsEngine.js.map +0 -1
  239. package/dist/metrics/index.d.ts +0 -11
  240. package/dist/metrics/index.d.ts.map +0 -1
  241. package/dist/metrics/index.js +0 -17
  242. package/dist/metrics/index.js.map +0 -1
  243. package/dist/middleware/expressFirewall.d.ts +0 -51
  244. package/dist/middleware/expressFirewall.d.ts.map +0 -1
  245. package/dist/middleware/expressFirewall.js +0 -140
  246. package/dist/middleware/expressFirewall.js.map +0 -1
  247. package/dist/middleware/index.d.ts +0 -8
  248. package/dist/middleware/index.d.ts.map +0 -1
  249. package/dist/middleware/index.js +0 -15
  250. package/dist/middleware/index.js.map +0 -1
  251. package/dist/middleware/withFirewall.d.ts +0 -50
  252. package/dist/middleware/withFirewall.d.ts.map +0 -1
  253. package/dist/middleware/withFirewall.js +0 -155
  254. package/dist/middleware/withFirewall.js.map +0 -1
  255. package/dist/observability/logger.d.ts +0 -14
  256. package/dist/observability/logger.d.ts.map +0 -1
  257. package/dist/observability/logger.js +0 -21
  258. package/dist/observability/logger.js.map +0 -1
  259. package/dist/observability/metrics.d.ts +0 -17
  260. package/dist/observability/metrics.d.ts.map +0 -1
  261. package/dist/observability/metrics.js +0 -36
  262. package/dist/observability/metrics.js.map +0 -1
  263. package/dist/os/ExecutionOS.d.ts +0 -220
  264. package/dist/os/ExecutionOS.d.ts.map +0 -1
  265. package/dist/os/ExecutionOS.js +0 -398
  266. package/dist/os/ExecutionOS.js.map +0 -1
  267. package/dist/os/GlobalIntelligence.d.ts +0 -154
  268. package/dist/os/GlobalIntelligence.d.ts.map +0 -1
  269. package/dist/os/GlobalIntelligence.js +0 -374
  270. package/dist/os/GlobalIntelligence.js.map +0 -1
  271. package/dist/os/PolicyMarketplace.d.ts +0 -192
  272. package/dist/os/PolicyMarketplace.d.ts.map +0 -1
  273. package/dist/os/PolicyMarketplace.js +0 -384
  274. package/dist/os/PolicyMarketplace.js.map +0 -1
  275. package/dist/os/SDKInterception.d.ts +0 -115
  276. package/dist/os/SDKInterception.d.ts.map +0 -1
  277. package/dist/os/SDKInterception.js +0 -317
  278. package/dist/os/SDKInterception.js.map +0 -1
  279. package/dist/os/index.d.ts +0 -60
  280. package/dist/os/index.d.ts.map +0 -1
  281. package/dist/os/index.js +0 -82
  282. package/dist/os/index.js.map +0 -1
  283. package/dist/proxy/index.d.ts +0 -2
  284. package/dist/proxy/index.d.ts.map +0 -1
  285. package/dist/proxy/index.js +0 -18
  286. package/dist/proxy/index.js.map +0 -1
  287. package/dist/proxy/server.d.ts +0 -24
  288. package/dist/proxy/server.d.ts.map +0 -1
  289. package/dist/proxy/server.js +0 -395
  290. package/dist/proxy/server.js.map +0 -1
  291. package/dist/public/BenchmarksPage.d.ts +0 -60
  292. package/dist/public/BenchmarksPage.d.ts.map +0 -1
  293. package/dist/public/BenchmarksPage.js +0 -397
  294. package/dist/public/BenchmarksPage.js.map +0 -1
  295. package/dist/public/DocsPage.d.ts +0 -11
  296. package/dist/public/DocsPage.d.ts.map +0 -1
  297. package/dist/public/DocsPage.js +0 -496
  298. package/dist/public/DocsPage.js.map +0 -1
  299. package/dist/public/StatusPage.d.ts +0 -55
  300. package/dist/public/StatusPage.d.ts.map +0 -1
  301. package/dist/public/StatusPage.js +0 -344
  302. package/dist/public/StatusPage.js.map +0 -1
  303. package/dist/public/index.d.ts +0 -12
  304. package/dist/public/index.d.ts.map +0 -1
  305. package/dist/public/index.js +0 -20
  306. package/dist/public/index.js.map +0 -1
  307. package/dist/replacements/axios.d.ts +0 -14
  308. package/dist/replacements/axios.d.ts.map +0 -1
  309. package/dist/replacements/axios.js +0 -35
  310. package/dist/replacements/axios.js.map +0 -1
  311. package/dist/replacements/fetch.d.ts +0 -13
  312. package/dist/replacements/fetch.d.ts.map +0 -1
  313. package/dist/replacements/fetch.js +0 -20
  314. package/dist/replacements/fetch.js.map +0 -1
  315. package/dist/replacements/openai.d.ts +0 -14
  316. package/dist/replacements/openai.d.ts.map +0 -1
  317. package/dist/replacements/openai.js +0 -22
  318. package/dist/replacements/openai.js.map +0 -1
  319. package/dist/saas/CostExplosionDemo.d.ts +0 -56
  320. package/dist/saas/CostExplosionDemo.d.ts.map +0 -1
  321. package/dist/saas/CostExplosionDemo.js +0 -190
  322. package/dist/saas/CostExplosionDemo.js.map +0 -1
  323. package/dist/saas/LiveProtection.d.ts +0 -61
  324. package/dist/saas/LiveProtection.d.ts.map +0 -1
  325. package/dist/saas/LiveProtection.js +0 -187
  326. package/dist/saas/LiveProtection.js.map +0 -1
  327. package/dist/saas/ProductionSaaS.d.ts +0 -56
  328. package/dist/saas/ProductionSaaS.d.ts.map +0 -1
  329. package/dist/saas/ProductionSaaS.js +0 -831
  330. package/dist/saas/ProductionSaaS.js.map +0 -1
  331. package/dist/saas/SaaSServer.d.ts +0 -50
  332. package/dist/saas/SaaSServer.d.ts.map +0 -1
  333. package/dist/saas/SaaSServer.js +0 -669
  334. package/dist/saas/SaaSServer.js.map +0 -1
  335. package/dist/saas/UserStore.d.ts +0 -49
  336. package/dist/saas/UserStore.d.ts.map +0 -1
  337. package/dist/saas/UserStore.js +0 -137
  338. package/dist/saas/UserStore.js.map +0 -1
  339. package/dist/saas/billingMetrics.d.ts +0 -14
  340. package/dist/saas/billingMetrics.d.ts.map +0 -1
  341. package/dist/saas/billingMetrics.js +0 -23
  342. package/dist/saas/billingMetrics.js.map +0 -1
  343. package/dist/saas/index.d.ts +0 -12
  344. package/dist/saas/index.d.ts.map +0 -1
  345. package/dist/saas/index.js +0 -23
  346. package/dist/saas/index.js.map +0 -1
  347. package/dist/saas/telemetry.d.ts +0 -24
  348. package/dist/saas/telemetry.d.ts.map +0 -1
  349. package/dist/saas/telemetry.js +0 -30
  350. package/dist/saas/telemetry.js.map +0 -1
  351. package/dist/saas/usageMeter.d.ts +0 -28
  352. package/dist/saas/usageMeter.d.ts.map +0 -1
  353. package/dist/saas/usageMeter.js +0 -41
  354. package/dist/saas/usageMeter.js.map +0 -1
  355. package/dist/security/TrustBoundaryValidator.d.ts +0 -105
  356. package/dist/security/TrustBoundaryValidator.d.ts.map +0 -1
  357. package/dist/security/TrustBoundaryValidator.js +0 -305
  358. package/dist/security/TrustBoundaryValidator.js.map +0 -1
  359. package/dist/starters/express-protected.d.ts +0 -18
  360. package/dist/starters/express-protected.d.ts.map +0 -1
  361. package/dist/starters/express-protected.js +0 -93
  362. package/dist/starters/express-protected.js.map +0 -1
  363. package/dist/starters/langchain-protected.d.ts +0 -18
  364. package/dist/starters/langchain-protected.d.ts.map +0 -1
  365. package/dist/starters/langchain-protected.js +0 -85
  366. package/dist/starters/langchain-protected.js.map +0 -1
  367. package/dist/starters/openai-protected.d.ts +0 -19
  368. package/dist/starters/openai-protected.d.ts.map +0 -1
  369. package/dist/starters/openai-protected.js +0 -84
  370. package/dist/starters/openai-protected.js.map +0 -1
  371. package/dist/starters/serverless-protected.d.ts +0 -19
  372. package/dist/starters/serverless-protected.d.ts.map +0 -1
  373. package/dist/starters/serverless-protected.js +0 -83
  374. package/dist/starters/serverless-protected.js.map +0 -1
  375. package/dist/storage/adapters.d.ts +0 -24
  376. package/dist/storage/adapters.d.ts.map +0 -1
  377. package/dist/storage/adapters.js +0 -123
  378. package/dist/storage/adapters.js.map +0 -1
  379. package/dist/storage/index.d.ts +0 -2
  380. package/dist/storage/index.d.ts.map +0 -1
  381. package/dist/storage/index.js +0 -8
  382. package/dist/storage/index.js.map +0 -1
  383. package/dist/tests/b2b-hardening.test.d.ts +0 -2
  384. package/dist/tests/b2b-hardening.test.d.ts.map +0 -1
  385. package/dist/tests/b2b-hardening.test.js +0 -164
  386. package/dist/tests/b2b-hardening.test.js.map +0 -1
  387. package/dist/tests/cli.contract.test.d.ts +0 -2
  388. package/dist/tests/cli.contract.test.d.ts.map +0 -1
  389. package/dist/tests/cli.contract.test.js +0 -28
  390. package/dist/tests/cli.contract.test.js.map +0 -1
  391. package/dist/tests/cli.snapshot.test.d.ts +0 -14
  392. package/dist/tests/cli.snapshot.test.d.ts.map +0 -1
  393. package/dist/tests/cli.snapshot.test.js +0 -132
  394. package/dist/tests/cli.snapshot.test.js.map +0 -1
  395. package/dist/tests/cli.strict.test.d.ts +0 -6
  396. package/dist/tests/cli.strict.test.d.ts.map +0 -1
  397. package/dist/tests/cli.strict.test.js +0 -173
  398. package/dist/tests/cli.strict.test.js.map +0 -1
  399. package/dist/tests/cli.test.d.ts +0 -5
  400. package/dist/tests/cli.test.d.ts.map +0 -1
  401. package/dist/tests/cli.test.js +0 -54
  402. package/dist/tests/cli.test.js.map +0 -1
  403. package/dist/tests/concurrency.state.test.d.ts +0 -6
  404. package/dist/tests/concurrency.state.test.d.ts.map +0 -1
  405. package/dist/tests/concurrency.state.test.js +0 -231
  406. package/dist/tests/concurrency.state.test.js.map +0 -1
  407. package/dist/tests/detection-engine.strict.test.d.ts +0 -6
  408. package/dist/tests/detection-engine.strict.test.d.ts.map +0 -1
  409. package/dist/tests/detection-engine.strict.test.js +0 -323
  410. package/dist/tests/detection-engine.strict.test.js.map +0 -1
  411. package/dist/tests/e2e.system.test.d.ts +0 -7
  412. package/dist/tests/e2e.system.test.d.ts.map +0 -1
  413. package/dist/tests/e2e.system.test.js +0 -189
  414. package/dist/tests/e2e.system.test.js.map +0 -1
  415. package/dist/tests/edge-cases.test.d.ts +0 -6
  416. package/dist/tests/edge-cases.test.d.ts.map +0 -1
  417. package/dist/tests/edge-cases.test.js +0 -357
  418. package/dist/tests/edge-cases.test.js.map +0 -1
  419. package/dist/tests/performance.benchmark.test.d.ts +0 -2
  420. package/dist/tests/performance.benchmark.test.d.ts.map +0 -1
  421. package/dist/tests/performance.benchmark.test.js +0 -24
  422. package/dist/tests/performance.benchmark.test.js.map +0 -1
  423. package/dist/tests/proxy.production.test.d.ts +0 -6
  424. package/dist/tests/proxy.production.test.d.ts.map +0 -1
  425. package/dist/tests/proxy.production.test.js +0 -274
  426. package/dist/tests/proxy.production.test.js.map +0 -1
  427. package/dist/tests/proxy.strict.test.d.ts +0 -6
  428. package/dist/tests/proxy.strict.test.d.ts.map +0 -1
  429. package/dist/tests/proxy.strict.test.js +0 -188
  430. package/dist/tests/proxy.strict.test.js.map +0 -1
  431. package/dist/tests/proxy.test.d.ts +0 -5
  432. package/dist/tests/proxy.test.d.ts.map +0 -1
  433. package/dist/tests/proxy.test.js +0 -61
  434. package/dist/tests/proxy.test.js.map +0 -1
  435. package/dist/tests/roi.scenario.test.d.ts +0 -2
  436. package/dist/tests/roi.scenario.test.d.ts.map +0 -1
  437. package/dist/tests/roi.scenario.test.js +0 -26
  438. package/dist/tests/roi.scenario.test.js.map +0 -1
  439. package/dist/tests/server.contract.test.d.ts +0 -6
  440. package/dist/tests/server.contract.test.d.ts.map +0 -1
  441. package/dist/tests/server.contract.test.js +0 -48
  442. package/dist/tests/server.contract.test.js.map +0 -1
  443. package/dist/tests/tokenCounter.test.d.ts +0 -5
  444. package/dist/tests/tokenCounter.test.d.ts.map +0 -1
  445. package/dist/tests/tokenCounter.test.js +0 -66
  446. package/dist/tests/tokenCounter.test.js.map +0 -1
  447. package/dist/tests/v113/client.test.d.ts +0 -2
  448. package/dist/tests/v113/client.test.d.ts.map +0 -1
  449. package/dist/tests/v113/client.test.js +0 -22
  450. package/dist/tests/v113/client.test.js.map +0 -1
  451. package/dist/tests/v113/executionGuard.test.d.ts +0 -2
  452. package/dist/tests/v113/executionGuard.test.d.ts.map +0 -1
  453. package/dist/tests/v113/executionGuard.test.js +0 -39
  454. package/dist/tests/v113/executionGuard.test.js.map +0 -1
  455. package/dist/token-counter/index.d.ts +0 -2
  456. package/dist/token-counter/index.d.ts.map +0 -1
  457. package/dist/token-counter/index.js +0 -18
  458. package/dist/token-counter/index.js.map +0 -1
  459. package/dist/token-counter/tokenCounter.d.ts +0 -18
  460. package/dist/token-counter/tokenCounter.d.ts.map +0 -1
  461. package/dist/token-counter/tokenCounter.js +0 -91
  462. package/dist/token-counter/tokenCounter.js.map +0 -1
  463. package/dist/trust/ImmutableAudit.d.ts +0 -159
  464. package/dist/trust/ImmutableAudit.d.ts.map +0 -1
  465. package/dist/trust/ImmutableAudit.js +0 -340
  466. package/dist/trust/ImmutableAudit.js.map +0 -1
  467. package/dist/trust/PublicVerificationLedger.d.ts +0 -91
  468. package/dist/trust/PublicVerificationLedger.d.ts.map +0 -1
  469. package/dist/trust/PublicVerificationLedger.js +0 -223
  470. package/dist/trust/PublicVerificationLedger.js.map +0 -1
  471. package/dist/trust/index.d.ts +0 -11
  472. package/dist/trust/index.d.ts.map +0 -1
  473. package/dist/trust/index.js +0 -20
  474. package/dist/trust/index.js.map +0 -1
  475. package/dist/utils/alert.d.ts +0 -13
  476. package/dist/utils/alert.d.ts.map +0 -1
  477. package/dist/utils/alert.js +0 -49
  478. package/dist/utils/alert.js.map +0 -1
  479. package/dist/utils/index.d.ts +0 -2
  480. package/dist/utils/index.d.ts.map +0 -1
  481. package/dist/utils/index.js +0 -18
  482. package/dist/utils/index.js.map +0 -1
  483. package/dist/wrapper/aiFirewall.d.ts +0 -61
  484. package/dist/wrapper/aiFirewall.d.ts.map +0 -1
  485. package/dist/wrapper/aiFirewall.js +0 -117
  486. package/dist/wrapper/aiFirewall.js.map +0 -1
  487. package/dist/wrapper/index.d.ts +0 -3
  488. package/dist/wrapper/index.d.ts.map +0 -1
  489. package/dist/wrapper/index.js +0 -21
  490. package/dist/wrapper/index.js.map +0 -1
  491. package/dist/wrapper/sdk.d.ts +0 -49
  492. package/dist/wrapper/sdk.d.ts.map +0 -1
  493. package/dist/wrapper/sdk.js +0 -140
  494. package/dist/wrapper/sdk.js.map +0 -1
package/README.md CHANGED
@@ -1,48 +1,107 @@
1
- # @salimassili/ai-costguard
1
+ # AI CostGuard
2
2
 
3
- ![npm](https://img.shields.io/npm/v/@salimassili/ai-costguard)
4
- ![downloads](https://img.shields.io/npm/dw/@salimassili/ai-costguard)
5
- ![license](https://img.shields.io/npm/l/@salimassili/ai-costguard)
3
+ The kill-switch for AI agents.
6
4
 
7
- ---
5
+ Prevent runaway AI agent loops, token bombs, and budget explosions before they happen.
8
6
 
9
- ## ⚡ What it does
7
+ ```bash
8
+ npm install @salimassili/ai-costguard
9
+ ```
10
+
11
+ ## Install & Protect (30 seconds)
12
+
13
+ ```ts
14
+ import { withCostGuard } from '@salimassili/ai-costguard';
15
+
16
+ const openai = withCostGuard(client, {
17
+ maxTotalCostPerDay: 5
18
+ });
19
+ ```
20
+
21
+ ## What You Get
22
+
23
+ When your agent spirals:
24
+
25
+ ```
26
+ [CostGuard] BLOCKED LOOP → 12 recursive cycles detected → estimated save: $18.42
27
+ ```
28
+
29
+ A financial save event. Not a vague error.
30
+
31
+ ## Why This Exists
32
+
33
+ AI agents don't fail gracefully. They fail exponentially.
34
+
35
+ A stuck agent can burn hundreds of dollars in API credits overnight. Not because it's fast. Because it's relentless.
36
+
37
+ Your agent framework has no kill-switch. Rate limiters don't detect semantic loops. Cost alerts tell you after the money is gone.
38
+
39
+ This is the missing layer.
10
40
 
11
- AI execution firewall for cost control and runtime protection.
41
+ ## Real-World Protection
12
42
 
13
- ---
43
+ ### 1. Recursive Loop
44
+ Agent repeats the same reasoning forever.
14
45
 
15
- ## 📦 Install
46
+ ### 2. Tool Retry Explosion
47
+ Agent retries a failing tool endlessly.
48
+
49
+ ### 3. Budget Breach
50
+ Agent burns tokens rapidly until blocked.
51
+
52
+ ## API
53
+
54
+ ```ts
55
+ withCostGuard(client, {
56
+ maxTotalCostPerDay: 10, // Hard USD limit
57
+ maxTokensPerRequest: 4000, // Per-call limit
58
+ maxRequestsPerMinute: 30, // Rate limit
59
+ loopDetection: true // Catch repeated prompts
60
+ })
61
+ ```
62
+
63
+ ## Example
64
+
65
+ ```ts
66
+ import { withCostGuard, CostGuardError } from '@salimassili/ai-costguard';
67
+
68
+ const openai = withCostGuard(
69
+ new OpenAI({ apiKey: process.env.OPENAI_API_KEY }),
70
+ { maxTotalCostPerDay: 5 }
71
+ );
72
+
73
+ try {
74
+ const response = await openai.chat.completions.create({
75
+ model: 'gpt-4',
76
+ messages: [{ role: 'user', content: 'Hello' }],
77
+ });
78
+ } catch (err) {
79
+ if (err instanceof CostGuardError) {
80
+ console.log('Agent blocked:', err.message);
81
+ // Handle gracefully
82
+ }
83
+ }
84
+ ```
85
+
86
+ ## Express Middleware
87
+
88
+ ```ts
89
+ import { costGuardMiddleware } from '@salimassili/ai-costguard';
90
+
91
+ app.use(costGuardMiddleware({ maxTotalCostPerDay: 10 }));
92
+ ```
93
+
94
+ ## Features
95
+
96
+ - **Loop detection** — kills repeated prompts and recursive cycles
97
+ - **Daily cost caps** — hard USD limits, no overages
98
+ - **Token limits** — block oversized single requests
99
+ - **RPM limits** — catch agents hammering the API
100
+
101
+ ## Install Before You Deploy
16
102
 
17
103
  ```bash
18
104
  npm install @salimassili/ai-costguard
19
- 🚀 Quick Start
20
- import * as ai from "@salimassili/ai-costguard";
21
-
22
- console.log(ai);
23
- 🧠 Real usage
24
- Middleware usage
25
- // example placeholder
26
- // const protectedAI = ai.withFirewall(model);
27
- CLI usage
28
- npx ai-costguard
29
- Production example
30
- // server.ts
31
- // ai protection layer in backend
32
- 📚 API Reference
33
- Exports
34
- ExecutionGuard
35
- CostEstimator
36
- PolicyEngine
37
- withFirewall
38
-
39
- ---
40
-
41
- # 🌍 STEP 2 — Add README to git
42
-
43
- Save file, then run:
105
+ ```
44
106
 
45
- ```bash
46
- git add README.md
47
- git commit -m "docs: improve README for production readiness"
48
- git push origin main
107
+ MIT | [GitHub](https://github.com/salimassili62-afk/ai-costguard)
@@ -0,0 +1,27 @@
1
+ /**
2
+ * CostGuard.ts — AI Agent Loop & Cost Firewall
3
+ *
4
+ * Wraps your AI client and kills runaway loops before they burn money.
5
+ * When it blocks, it tells you exactly how much it saved.
6
+ */
7
+ import { CostGuardConfig, RequestContext, GuardState } from './types.js';
8
+ /**
9
+ * Wraps any AI client. Detects loops. Enforces hard limits.
10
+ * Throws on block so your app handles it.
11
+ */
12
+ export declare function withCostGuard(client: any, config: any, sharedState?: GuardState): any;
13
+ /**
14
+ * Standalone middleware for Express/Fastify
15
+ */
16
+ export declare function costGuardMiddleware(config?: Partial<CostGuardConfig>): (req: any, res: any, next: any) => void;
17
+ /** Custom error so users can catch it specifically */
18
+ export declare class CostGuardError extends Error {
19
+ context: RequestContext;
20
+ constructor(message: string, context: RequestContext);
21
+ }
22
+ /** Get current pricing for a model (cents per 1K tokens) */
23
+ export declare function getPricing(model: string): {
24
+ input: number;
25
+ output: number;
26
+ } | undefined;
27
+ //# sourceMappingURL=CostGuard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostGuard.d.ts","sourceRoot":"","sources":["../../src/core/CostGuard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAYxF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,UAAU,OAmE/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,IAiB/D,KAAK,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,GAAG,UAgBtC;AAoFD,sDAAsD;AACtD,qBAAa,cAAe,SAAQ,KAAK;IACvC,OAAO,EAAE,cAAc,CAAC;gBACZ,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;CAKrD;AAED,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAEvF"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * CostGuard.ts — AI Agent Loop & Cost Firewall
3
+ *
4
+ * Wraps your AI client and kills runaway loops before they burn money.
5
+ * When it blocks, it tells you exactly how much it saved.
6
+ */
7
+ const MODEL_PRICING = {
8
+ 'gpt-4': { input: 0.03, output: 0.06 },
9
+ 'gpt-4o': { input: 0.005, output: 0.015 },
10
+ 'gpt-4o-mini': { input: 0.00015, output: 0.0006 },
11
+ 'gpt-3.5-turbo': { input: 0.0005, output: 0.0015 },
12
+ 'claude-3-opus': { input: 0.015, output: 0.075 },
13
+ 'claude-3-sonnet': { input: 0.003, output: 0.015 },
14
+ 'claude-3-haiku': { input: 0.00025, output: 0.00125 },
15
+ };
16
+ /**
17
+ * Wraps any AI client. Detects loops. Enforces hard limits.
18
+ * Throws on block so your app handles it.
19
+ */
20
+ export function withCostGuard(client, config, sharedState) {
21
+ const defaults = {
22
+ maxTokensPerRequest: 4000,
23
+ maxRequestsPerMinute: 30,
24
+ maxTotalCostPerDay: 10.00,
25
+ loopDetection: true,
26
+ };
27
+ const guard = { ...defaults, ...config };
28
+ // Use shared state if provided (for nested objects), otherwise create new
29
+ const state = sharedState || {
30
+ requestCount: 0,
31
+ totalCost: 0,
32
+ lastRequestTime: 0,
33
+ recentPrompts: [],
34
+ blockedCount: 0,
35
+ };
36
+ return new Proxy(client, {
37
+ get(target, prop) {
38
+ const value = target[prop];
39
+ // If it's a function (like .create), wrap it
40
+ if (typeof value === 'function') {
41
+ return (...args) => {
42
+ // Extract request details from args
43
+ const ctx = extractContext(args, prop);
44
+ // Evaluate against limits
45
+ const decision = evaluate(guard, state, ctx);
46
+ if (decision === 'block') {
47
+ state.blockedCount++;
48
+ // Build a financial save message
49
+ const saveMsg = buildSaveMessage(state, ctx);
50
+ console.error(saveMsg);
51
+ if (guard.onLimitHit)
52
+ guard.onLimitHit('Limit exceeded', ctx.estimatedCost);
53
+ throw new CostGuardError(saveMsg.replace('[AI CostGuard] ', ''), ctx);
54
+ }
55
+ // Update state
56
+ state.requestCount++;
57
+ state.totalCost += ctx.estimatedCost;
58
+ state.lastRequestTime = Date.now();
59
+ if (guard.loopDetection)
60
+ state.recentPrompts.push(ctx.prompt);
61
+ if (state.recentPrompts.length > 20)
62
+ state.recentPrompts.shift();
63
+ console.log(`[AI CostGuard] ALLOW: ${ctx.model} | ${ctx.tokens}t | $${ctx.estimatedCost.toFixed(4)} | Total: $${state.totalCost.toFixed(2)}`);
64
+ // Pass through to actual API call
65
+ return value.apply(target, args);
66
+ };
67
+ }
68
+ // If it's a nested object (like .chat.completions), recurse with shared state
69
+ if (value && typeof value === 'object') {
70
+ return withCostGuard(value, guard, state);
71
+ }
72
+ return value;
73
+ },
74
+ });
75
+ }
76
+ /**
77
+ * Standalone middleware for Express/Fastify
78
+ */
79
+ export function costGuardMiddleware(config = {}) {
80
+ const guard = {
81
+ maxTokensPerRequest: 4000,
82
+ maxRequestsPerMinute: 30,
83
+ maxTotalCostPerDay: 10.00,
84
+ loopDetection: true,
85
+ ...config,
86
+ };
87
+ const state = {
88
+ requestCount: 0,
89
+ totalCost: 0,
90
+ lastRequestTime: 0,
91
+ recentPrompts: [],
92
+ blockedCount: 0,
93
+ };
94
+ return (req, res, next) => {
95
+ req.costGuard = {
96
+ state,
97
+ evaluate: (ctx) => {
98
+ const decision = evaluate(guard, state, ctx);
99
+ if (decision === 'block') {
100
+ state.blockedCount++;
101
+ throw new CostGuardError('Request blocked by cost guard', ctx);
102
+ }
103
+ state.requestCount++;
104
+ state.totalCost += ctx.estimatedCost;
105
+ state.lastRequestTime = Date.now();
106
+ },
107
+ };
108
+ next();
109
+ };
110
+ }
111
+ /** Extract request context from API call args */
112
+ function extractContext(args, prop) {
113
+ const params = args[0] || {};
114
+ const model = params.model || 'unknown';
115
+ const messages = params.messages || [];
116
+ const prompt = messages.map((m) => m.content).join(' ').slice(0, 200);
117
+ // Estimate tokens (rough: 1 token ≈ 4 chars for English)
118
+ const inputText = JSON.stringify(messages);
119
+ const estimatedInputTokens = Math.ceil(inputText.length / 4);
120
+ const maxOutputTokens = params.max_tokens || 1000;
121
+ const tokens = estimatedInputTokens + maxOutputTokens;
122
+ // Estimate cost
123
+ const pricing = MODEL_PRICING[model] || { input: 0.01, output: 0.03 };
124
+ const estimatedCost = (estimatedInputTokens / 1000) * pricing.input +
125
+ (maxOutputTokens / 1000) * pricing.output;
126
+ return {
127
+ model,
128
+ tokens,
129
+ estimatedCost,
130
+ timestamp: Date.now(),
131
+ prompt,
132
+ };
133
+ }
134
+ /** Build a human-readable "financial save" message */
135
+ function buildSaveMessage(state, ctx) {
136
+ const duplicates = state.recentPrompts.filter(p => p === ctx.prompt).length;
137
+ const isLoop = duplicates >= 2;
138
+ // Estimate how much we saved by blocking this + projected future calls
139
+ // Assume a runaway loop would repeat ~50 more times if unchecked
140
+ const projectedCycles = isLoop ? 50 : 10;
141
+ const estimatedSave = (ctx.estimatedCost * projectedCycles) + ctx.estimatedCost;
142
+ if (isLoop) {
143
+ return `[AI CostGuard] BLOCKED LOOP → ${duplicates + 1} recursive cycles detected → estimated save: $${estimatedSave.toFixed(2)}`;
144
+ }
145
+ if (ctx.tokens > 4000) {
146
+ return `[AI CostGuard] BLOCKED TOKEN BOMB → ${ctx.tokens} tokens → estimated save: $${ctx.estimatedCost.toFixed(2)}`;
147
+ }
148
+ if (state.totalCost + ctx.estimatedCost > 5) {
149
+ const remaining = (state.totalCost + ctx.estimatedCost) - 5;
150
+ return `[AI CostGuard] BLOCKED BUDGET BREACH → daily cap reached → estimated save: $${remaining.toFixed(2)}`;
151
+ }
152
+ return `[AI CostGuard] BLOCKED → estimated save: $${ctx.estimatedCost.toFixed(2)}`;
153
+ }
154
+ /** Evaluate request against all limits */
155
+ function evaluate(guard, state, ctx) {
156
+ // 1. Token limit
157
+ if (ctx.tokens > guard.maxTokensPerRequest) {
158
+ return 'block';
159
+ }
160
+ // 2. RPM limit
161
+ const oneMinuteAgo = Date.now() - 60000;
162
+ if (state.lastRequestTime > oneMinuteAgo && state.requestCount >= guard.maxRequestsPerMinute) {
163
+ return 'block';
164
+ }
165
+ // 3. Daily cost limit
166
+ if (state.totalCost + ctx.estimatedCost > guard.maxTotalCostPerDay) {
167
+ return 'block';
168
+ }
169
+ // 4. Loop detection (simple: same prompt repeated)
170
+ if (guard.loopDetection && state.recentPrompts.length > 0) {
171
+ const duplicates = state.recentPrompts.filter(p => p === ctx.prompt).length;
172
+ if (duplicates >= 2) {
173
+ return 'block';
174
+ }
175
+ }
176
+ return 'allow';
177
+ }
178
+ /** Custom error so users can catch it specifically */
179
+ export class CostGuardError extends Error {
180
+ context;
181
+ constructor(message, context) {
182
+ super(message);
183
+ this.name = 'CostGuardError';
184
+ this.context = context;
185
+ }
186
+ }
187
+ /** Get current pricing for a model (cents per 1K tokens) */
188
+ export function getPricing(model) {
189
+ return MODEL_PRICING[model];
190
+ }
191
+ //# sourceMappingURL=CostGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostGuard.js","sourceRoot":"","sources":["../../src/core/CostGuard.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,31 @@
1
- export interface FirewallMetadata {
2
- orgId?: string;
3
- teamId?: string;
4
- appId?: string;
5
- userId?: string;
6
- sessionId?: string;
7
- agentId?: string;
8
- workflowId?: string;
9
- apiKeyId?: string;
10
- requestId?: string;
11
- provider?: string;
12
- integration?: string;
13
- model?: string;
14
- [key: string]: string | number | boolean | undefined;
1
+ /**
2
+ * Minimal types for AI CostGuard MVP
3
+ */
4
+ export interface CostGuardConfig {
5
+ /** Max tokens per single request */
6
+ maxTokensPerRequest: number;
7
+ /** Max requests per minute */
8
+ maxRequestsPerMinute: number;
9
+ /** Max total cost per day in USD */
10
+ maxTotalCostPerDay: number;
11
+ /** Enable loop detection */
12
+ loopDetection: boolean;
13
+ /** Alert callback when limit hit */
14
+ onLimitHit?: (reason: string, cost: number) => void;
15
15
  }
16
- export interface TokenBreakdown {
17
- inputTokens?: number;
18
- outputTokens?: number;
19
- totalTokens?: number;
20
- cachedInputTokens?: number;
21
- reasoningTokens?: number;
22
- audioInputTokens?: number;
23
- audioOutputTokens?: number;
24
- imageUnits?: number;
16
+ export interface RequestContext {
17
+ model: string;
18
+ tokens: number;
19
+ estimatedCost: number;
20
+ timestamp: number;
21
+ prompt: string;
25
22
  }
23
+ export interface GuardState {
24
+ requestCount: number;
25
+ totalCost: number;
26
+ lastRequestTime: number;
27
+ recentPrompts: string[];
28
+ blockedCount: number;
29
+ }
30
+ export type GuardDecision = 'allow' | 'block';
26
31
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8BAA8B;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oCAAoC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC"}
@@ -1,3 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ /**
2
+ * Minimal types for AI CostGuard MVP
3
+ */
4
+ export {};
3
5
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/dist/index.d.ts CHANGED
@@ -1,40 +1,21 @@
1
1
  /**
2
- * AI Cost Guard - Ambient Execution Safety Constraint for AI Systems
2
+ * AI CostGuard AI Agent Loop & Cost Firewall
3
3
  *
4
- * Runtime enforcement layer that activates automatically.
4
+ * Detects infinite loops in autonomous AI agents and kills them
5
+ * before they burn your API budget.
5
6
  *
6
- * Usage:
7
- * import 'ai-costguard'
7
+ * Wraps your AI client. Enforces hard limits.
8
+ * When it blocks, it tells you exactly how much it saved.
8
9
  *
9
- * That's it. Protection is now active. All AI calls are intercepted.
10
+ * @example
11
+ * import { OpenAI } from 'openai';
12
+ * import { withCostGuard } from '@salimassili/ai-costguard';
10
13
  *
11
- * System identity: "Ambient execution safety constraint for AI systems"
12
- * NOT: tool, SDK, framework, product, middleware
13
- * YES: runtime enforcement layer (like TLS for AI)
14
- *
15
- * Removing this import makes your AI execution unsafe.
14
+ * const openai = withCostGuard(
15
+ * new OpenAI({ apiKey: 'sk-...' }),
16
+ * { maxTotalCostPerDay: 5.00 }
17
+ * );
16
18
  */
17
- import { ambientProtection, getAmbientStatus } from './ambient/AmbientProtection';
18
- export { OpenAI } from './replacements/openai';
19
- export { fetch } from './replacements/fetch';
20
- export { default as axios } from './replacements/axios';
21
- export { getAmbientStatus };
22
- export { STARTER_OPENAI_PROTECTED, generateOpenAIStarter } from './starters/openai-protected';
23
- export { STARTER_EXPRESS_PROTECTED, generateExpressStarter } from './starters/express-protected';
24
- export { STARTER_SERVERLESS_PROTECTED, generateServerlessStarter } from './starters/serverless-protected';
25
- export { STARTER_LANGCHAIN_PROTECTED, generateLangChainStarter } from './starters/langchain-protected';
26
- export { ProductionSaaS, startProductionSaaS } from './saas';
27
- export { publicLedger } from './trust/PublicVerificationLedger';
28
- export declare const protection: {
29
- active: boolean;
30
- status: {
31
- active: boolean;
32
- mode: string;
33
- interceptCount: number;
34
- blockCount: number;
35
- aiUsageDetected: boolean;
36
- };
37
- message: string;
38
- };
39
- export default ambientProtection;
19
+ export { withCostGuard, costGuardMiddleware, CostGuardError, getPricing } from './core/CostGuard.js';
20
+ export type { CostGuardConfig, RequestContext, GuardState } from './core/types.js';
40
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAWlF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAI7C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAI5B,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAIvG,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAI7D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIhE,eAAO,MAAM,UAAU;;;;;;;;;;CAItB,CAAC;AAGF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrG,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,76 +1,20 @@
1
- "use strict";
2
1
  /**
3
- * AI Cost Guard - Ambient Execution Safety Constraint for AI Systems
2
+ * AI CostGuard AI Agent Loop & Cost Firewall
4
3
  *
5
- * Runtime enforcement layer that activates automatically.
4
+ * Detects infinite loops in autonomous AI agents and kills them
5
+ * before they burn your API budget.
6
6
  *
7
- * Usage:
8
- * import 'ai-costguard'
7
+ * Wraps your AI client. Enforces hard limits.
8
+ * When it blocks, it tells you exactly how much it saved.
9
9
  *
10
- * That's it. Protection is now active. All AI calls are intercepted.
10
+ * @example
11
+ * import { OpenAI } from 'openai';
12
+ * import { withCostGuard } from '@salimassili/ai-costguard';
11
13
  *
12
- * System identity: "Ambient execution safety constraint for AI systems"
13
- * NOT: tool, SDK, framework, product, middleware
14
- * YES: runtime enforcement layer (like TLS for AI)
15
- *
16
- * Removing this import makes your AI execution unsafe.
14
+ * const openai = withCostGuard(
15
+ * new OpenAI({ apiKey: 'sk-...' }),
16
+ * { maxTotalCostPerDay: 5.00 }
17
+ * );
17
18
  */
18
- var __importDefault = (this && this.__importDefault) || function (mod) {
19
- return (mod && mod.__esModule) ? mod : { "default": mod };
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.protection = exports.publicLedger = exports.startProductionSaaS = exports.ProductionSaaS = exports.generateLangChainStarter = exports.STARTER_LANGCHAIN_PROTECTED = exports.generateServerlessStarter = exports.STARTER_SERVERLESS_PROTECTED = exports.generateExpressStarter = exports.STARTER_EXPRESS_PROTECTED = exports.generateOpenAIStarter = exports.STARTER_OPENAI_PROTECTED = exports.getAmbientStatus = exports.axios = exports.OpenAI = void 0;
23
- // === AUTO-ACTIVATE ON IMPORT ===
24
- // Protection activates immediately when module is loaded
25
- const AmbientProtection_1 = require("./ambient/AmbientProtection");
26
- Object.defineProperty(exports, "getAmbientStatus", { enumerable: true, get: function () { return AmbientProtection_1.getAmbientStatus; } });
27
- // Console notification
28
- console.log('[AI Cost Guard] Execution constraint active');
29
- console.log('[AI Cost Guard] All AI calls will be intercepted');
30
- // === DROP-IN REPLACEMENTS ===
31
- // Replace your imports with protected versions
32
- // Replace: import { OpenAI } from 'openai'
33
- // With: import { OpenAI } from 'ai-costguard/openai'
34
- var openai_1 = require("./replacements/openai");
35
- Object.defineProperty(exports, "OpenAI", { enumerable: true, get: function () { return openai_1.OpenAI; } });
36
- // Replace: import { fetch } from 'cross-fetch'
37
- // With: import { fetch } from 'ai-costguard/fetch'
38
- var fetch_1 = require("./replacements/fetch");
39
- Object.defineProperty(exports, "fetch", { enumerable: true, get: function () { return fetch_1.fetch; } });
40
- // Replace: import axios from 'axios'
41
- // With: import axios from 'ai-costguard/axios'
42
- var axios_1 = require("./replacements/axios");
43
- Object.defineProperty(exports, "axios", { enumerable: true, get: function () { return __importDefault(axios_1).default; } });
44
- // === PROJECT STARTERS ===
45
- // Full working repos, already protected
46
- var openai_protected_1 = require("./starters/openai-protected");
47
- Object.defineProperty(exports, "STARTER_OPENAI_PROTECTED", { enumerable: true, get: function () { return openai_protected_1.STARTER_OPENAI_PROTECTED; } });
48
- Object.defineProperty(exports, "generateOpenAIStarter", { enumerable: true, get: function () { return openai_protected_1.generateOpenAIStarter; } });
49
- var express_protected_1 = require("./starters/express-protected");
50
- Object.defineProperty(exports, "STARTER_EXPRESS_PROTECTED", { enumerable: true, get: function () { return express_protected_1.STARTER_EXPRESS_PROTECTED; } });
51
- Object.defineProperty(exports, "generateExpressStarter", { enumerable: true, get: function () { return express_protected_1.generateExpressStarter; } });
52
- var serverless_protected_1 = require("./starters/serverless-protected");
53
- Object.defineProperty(exports, "STARTER_SERVERLESS_PROTECTED", { enumerable: true, get: function () { return serverless_protected_1.STARTER_SERVERLESS_PROTECTED; } });
54
- Object.defineProperty(exports, "generateServerlessStarter", { enumerable: true, get: function () { return serverless_protected_1.generateServerlessStarter; } });
55
- var langchain_protected_1 = require("./starters/langchain-protected");
56
- Object.defineProperty(exports, "STARTER_LANGCHAIN_PROTECTED", { enumerable: true, get: function () { return langchain_protected_1.STARTER_LANGCHAIN_PROTECTED; } });
57
- Object.defineProperty(exports, "generateLangChainStarter", { enumerable: true, get: function () { return langchain_protected_1.generateLangChainStarter; } });
58
- // === SELF-HOSTED INFRASTRUCTURE ===
59
- // For running your own protection server
60
- var saas_1 = require("./saas");
61
- Object.defineProperty(exports, "ProductionSaaS", { enumerable: true, get: function () { return saas_1.ProductionSaaS; } });
62
- Object.defineProperty(exports, "startProductionSaaS", { enumerable: true, get: function () { return saas_1.startProductionSaaS; } });
63
- // === TRUST & VERIFICATION ===
64
- // Public cryptographic proofs
65
- var PublicVerificationLedger_1 = require("./trust/PublicVerificationLedger");
66
- Object.defineProperty(exports, "publicLedger", { enumerable: true, get: function () { return PublicVerificationLedger_1.publicLedger; } });
67
- // === SYSTEM STATE ===
68
- // Current protection status
69
- exports.protection = {
70
- active: true,
71
- status: (0, AmbientProtection_1.getAmbientStatus)(),
72
- message: 'Execution secured. AI calls intercepted.',
73
- };
74
- // Default export is the ambient protection singleton
75
- exports.default = AmbientProtection_1.ambientProtection;
19
+ export { withCostGuard, costGuardMiddleware, CostGuardError, getPricing } from './core/CostGuard.js';
76
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;AAEH,kCAAkC;AAClC,yDAAyD;AACzD,mEAAkF;AAuBzE,iGAvBmB,oCAAgB,OAuBnB;AArBzB,uBAAuB;AACvB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;AAC3D,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;AAEhE,+BAA+B;AAC/B,+CAA+C;AAE/C,2CAA2C;AAC3C,wDAAwD;AACxD,gDAA+C;AAAtC,gGAAA,MAAM,OAAA;AAEf,+CAA+C;AAC/C,sDAAsD;AACtD,8CAA6C;AAApC,8FAAA,KAAK,OAAA;AAEd,qCAAqC;AACrC,kDAAkD;AAClD,8CAAwD;AAA/C,+GAAA,OAAO,OAAS;AAMzB,2BAA2B;AAC3B,wCAAwC;AACxC,gEAA8F;AAArF,4HAAA,wBAAwB,OAAA;AAAE,yHAAA,qBAAqB,OAAA;AACxD,kEAAiG;AAAxF,8HAAA,yBAAyB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAC1D,wEAA0G;AAAjG,oIAAA,4BAA4B,OAAA;AAAE,iIAAA,yBAAyB,OAAA;AAChE,sEAAuG;AAA9F,kIAAA,2BAA2B,OAAA;AAAE,+HAAA,wBAAwB,OAAA;AAE9D,qCAAqC;AACrC,yCAAyC;AACzC,+BAA6D;AAApD,sGAAA,cAAc,OAAA;AAAE,2GAAA,mBAAmB,OAAA;AAE5C,+BAA+B;AAC/B,8BAA8B;AAC9B,6EAAgE;AAAvD,wHAAA,YAAY,OAAA;AAErB,uBAAuB;AACvB,4BAA4B;AACf,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAA,oCAAgB,GAAE;IAC1B,OAAO,EAAE,0CAA0C;CACpD,CAAC;AAEF,qDAAqD;AACrD,kBAAe,qCAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}