@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,251 @@
1
+ "use strict";
2
+ /**
3
+ * AmbientProtection.ts - Runtime Execution Constraint
4
+ *
5
+ * Protection activates automatically on module import.
6
+ * No function call required. No configuration required.
7
+ *
8
+ * import 'ai-costguard' // → Protection is now active
9
+ *
10
+ * This is a runtime enforcement layer, not a tool.
11
+ * Like TLS for AI calls - always there, automatic, unsafe to remove.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.ambientProtection = exports.AmbientProtection = void 0;
15
+ exports.getAmbientStatus = getAmbientStatus;
16
+ exports.disableAmbientProtection = disableAmbientProtection;
17
+ // Protection state
18
+ let AMBIENT_ACTIVE = false;
19
+ let AI_USAGE_DETECTED = false;
20
+ // Store original implementations
21
+ const ORIGINALS = {
22
+ fetch: undefined,
23
+ http: undefined,
24
+ https: undefined,
25
+ };
26
+ // AI API endpoints to intercept
27
+ const AI_ENDPOINTS = [
28
+ 'api.openai.com',
29
+ 'api.anthropic.com',
30
+ 'generativelanguage.googleapis.com',
31
+ 'api.cohere.com',
32
+ 'api.together.xyz',
33
+ 'api.perplexity.ai',
34
+ ];
35
+ /**
36
+ * AmbientProtection - Runtime constraint that auto-activates
37
+ *
38
+ * This module patches the runtime globally when imported.
39
+ * No developer action required beyond: import 'ai-costguard'
40
+ */
41
+ class AmbientProtection {
42
+ constructor() {
43
+ this.interceptCount = 0;
44
+ this.blockCount = 0;
45
+ // Auto-detect API key from environment
46
+ this.apiKey = process.env.AI_COSTGUARD_API_KEY || '';
47
+ // Auto-detect mode from environment
48
+ const envMode = process.env.AI_COSTGUARD_MODE;
49
+ if (envMode === 'disabled') {
50
+ this.mode = 'disabled';
51
+ }
52
+ else if (envMode === 'observed') {
53
+ this.mode = 'observed';
54
+ }
55
+ else {
56
+ this.mode = 'enforced'; // Default: enforcement active
57
+ }
58
+ // Activate immediately on instantiation
59
+ this.activate();
60
+ }
61
+ /**
62
+ * Activate ambient protection globally
63
+ * This patches the runtime without any explicit developer call
64
+ */
65
+ activate() {
66
+ if (AMBIENT_ACTIVE)
67
+ return; // Already active
68
+ console.log('[AI Cost Guard] Ambient execution constraint activating...');
69
+ // Patch global fetch
70
+ this.patchGlobalFetch();
71
+ // Patch Node.js http/https
72
+ this.patchNodeHTTP();
73
+ // Monitor for AI SDK imports
74
+ this.monitorModuleImports();
75
+ AMBIENT_ACTIVE = true;
76
+ console.log('[AI Cost Guard] Runtime enforcement active. AI calls will be intercepted.');
77
+ if (this.mode === 'enforced') {
78
+ console.log('[AI Cost Guard] Mode: ENFORCED - Cost explosions will be blocked');
79
+ }
80
+ else if (this.mode === 'observed') {
81
+ console.log('[AI Cost Guard] Mode: OBSERVED - Logging only');
82
+ }
83
+ }
84
+ /**
85
+ * Patch global fetch to intercept AI calls
86
+ */
87
+ patchGlobalFetch() {
88
+ if (typeof globalThis === 'undefined')
89
+ return;
90
+ if (!globalThis.fetch)
91
+ return;
92
+ ORIGINALS.fetch = globalThis.fetch;
93
+ globalThis.fetch = async (input, init) => {
94
+ const url = input.toString();
95
+ // Check if this is an AI endpoint
96
+ if (this.isAIEndpoint(url)) {
97
+ AI_USAGE_DETECTED = true;
98
+ this.interceptCount++;
99
+ console.log(`[AI Cost Guard] Intercepted AI call: ${url}`);
100
+ // Check with protection engine
101
+ const decision = this.evaluateCall(url, init);
102
+ if (decision.action === 'block' && this.mode === 'enforced') {
103
+ this.blockCount++;
104
+ console.log(`[AI Cost Guard] BLOCKED: ${decision.reason} (${decision.estimatedCost} saved)`);
105
+ // Return synthetic error response
106
+ return new Response(JSON.stringify({
107
+ error: 'ai_cost_guard_blocked',
108
+ message: 'Cost explosion prevented',
109
+ reason: decision.reason,
110
+ estimated_savings: decision.estimatedCost,
111
+ }), {
112
+ status: 429,
113
+ statusText: 'Cost Explosion Prevented',
114
+ headers: { 'Content-Type': 'application/json' },
115
+ });
116
+ }
117
+ if (decision.action === 'block' && this.mode === 'observed') {
118
+ console.log(`[AI Cost Guard] WOULD BLOCK: ${decision.reason}`);
119
+ }
120
+ // Log all AI calls
121
+ this.logInterception(url, decision);
122
+ }
123
+ // Pass through to original fetch
124
+ return ORIGINALS.fetch(input, init);
125
+ };
126
+ // Mark as patched
127
+ Object.defineProperty(globalThis.fetch, '__ai_cost_guard_patched', {
128
+ value: true,
129
+ writable: false,
130
+ enumerable: false,
131
+ });
132
+ }
133
+ /**
134
+ * Patch Node.js http/https modules
135
+ */
136
+ patchNodeHTTP() {
137
+ try {
138
+ const http = require('http');
139
+ const https = require('https');
140
+ // Store originals
141
+ ORIGINALS.http = http.request;
142
+ ORIGINALS.https = https.request;
143
+ // Patch http.request
144
+ http.request = (...args) => {
145
+ const options = args[0];
146
+ const url = typeof options === 'string' ? options : `${options.hostname || options.host}${options.path}`;
147
+ if (this.isAIEndpoint(url)) {
148
+ console.log(`[AI Cost Guard] Intercepted Node HTTP request: ${url}`);
149
+ }
150
+ return ORIGINALS.http.call(http, ...args);
151
+ };
152
+ // Patch https.request
153
+ https.request = (...args) => {
154
+ const options = args[0];
155
+ const url = typeof options === 'string' ? options : `${options.hostname || options.host}${options.path}`;
156
+ if (this.isAIEndpoint(url)) {
157
+ console.log(`[AI Cost Guard] Intercepted Node HTTPS request: ${url}`);
158
+ }
159
+ return ORIGINALS.https.call(https, ...args);
160
+ };
161
+ }
162
+ catch {
163
+ // Node modules not available (browser environment)
164
+ }
165
+ }
166
+ /**
167
+ * Monitor module imports to detect AI SDK usage
168
+ */
169
+ monitorModuleImports() {
170
+ // In real implementation: use Module hooks or ESM loaders
171
+ // For now: rely on fetch/http interception
172
+ console.log('[AI Cost Guard] Monitoring for AI SDK usage...');
173
+ }
174
+ /**
175
+ * Check if URL is an AI endpoint
176
+ */
177
+ isAIEndpoint(url) {
178
+ return AI_ENDPOINTS.some(endpoint => url.includes(endpoint));
179
+ }
180
+ /**
181
+ * Evaluate an AI call for blocking
182
+ */
183
+ evaluateCall(url, init) {
184
+ // Simulate protection logic
185
+ // In real implementation: call protection service
186
+ const body = init?.body?.toString() || '';
187
+ // Detect repetitive patterns (simulated)
188
+ if (this.interceptCount > 3) {
189
+ return {
190
+ action: 'block',
191
+ reason: 'Loop pattern detected - repetitive AI calls',
192
+ estimatedCost: 0.06,
193
+ };
194
+ }
195
+ // Detect high-cost calls
196
+ if (body.length > 4000) {
197
+ return {
198
+ action: 'block',
199
+ reason: 'High-cost request detected',
200
+ estimatedCost: 0.12,
201
+ };
202
+ }
203
+ return {
204
+ action: 'allow',
205
+ reason: 'Normal request',
206
+ estimatedCost: 0.03,
207
+ };
208
+ }
209
+ /**
210
+ * Log interception for audit trail
211
+ */
212
+ logInterception(url, decision) {
213
+ // In real implementation: write to audit log
214
+ }
215
+ /**
216
+ * Get current protection status
217
+ */
218
+ getStatus() {
219
+ return {
220
+ active: AMBIENT_ACTIVE,
221
+ mode: this.mode,
222
+ interceptCount: this.interceptCount,
223
+ blockCount: this.blockCount,
224
+ aiUsageDetected: AI_USAGE_DETECTED,
225
+ };
226
+ }
227
+ /**
228
+ * Disable protection (requires explicit call)
229
+ */
230
+ disable() {
231
+ console.log('[AI Cost Guard] ⚠️ PROTECTION DISABLED - Execution constraint removed');
232
+ this.mode = 'disabled';
233
+ }
234
+ }
235
+ exports.AmbientProtection = AmbientProtection;
236
+ // === AUTO-ACTIVATE ON IMPORT ===
237
+ // This runs immediately when the module is imported
238
+ const AMBIENT = new AmbientProtection();
239
+ // Export the singleton for status checks
240
+ exports.ambientProtection = AMBIENT;
241
+ // Export status check function
242
+ function getAmbientStatus() {
243
+ return AMBIENT.getStatus();
244
+ }
245
+ // Export disable function (requires explicit action)
246
+ function disableAmbientProtection() {
247
+ AMBIENT.disable();
248
+ }
249
+ // Default export is the ambient singleton
250
+ exports.default = AMBIENT;
251
+ //# sourceMappingURL=AmbientProtection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmbientProtection.js","sourceRoot":"","sources":["../../src/ambient/AmbientProtection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AI Execution Firewall - Server Entrypoint
4
+ *
5
+ * This is the standalone entrypoint for starting the proxy server.
6
+ * It handles CLI argument parsing and server lifecycle.
7
+ *
8
+ * Usage:
9
+ * node dist/bin/start.js
10
+ * node dist/bin/start.js --port 3000
11
+ * PORT=3000 node dist/bin/start.js
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/bin/start.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * AI Execution Firewall - Server Entrypoint
5
+ *
6
+ * This is the standalone entrypoint for starting the proxy server.
7
+ * It handles CLI argument parsing and server lifecycle.
8
+ *
9
+ * Usage:
10
+ * node dist/bin/start.js
11
+ * node dist/bin/start.js --port 3000
12
+ * PORT=3000 node dist/bin/start.js
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const proxy_1 = require("../proxy");
16
+ // Parse command line arguments
17
+ const args = process.argv.slice(2);
18
+ let port;
19
+ // Check for --port or -p argument
20
+ const portIndex = args.findIndex(arg => arg === '--port' || arg === '-p');
21
+ if (portIndex !== -1 && args[portIndex + 1]) {
22
+ port = parseInt(args[portIndex + 1], 10);
23
+ }
24
+ // Fallback to environment variable or default
25
+ port = port || (process.env.PORT ? parseInt(process.env.PORT, 10) : 3000);
26
+ // Validate port
27
+ if (isNaN(port) || port < 1 || port > 65535) {
28
+ console.error(`[AI Firewall] Error: Invalid port number: ${port}`);
29
+ console.error('[AI Firewall] Port must be between 1 and 65535');
30
+ process.exit(1);
31
+ }
32
+ // Ensure logging is enabled for CLI mode
33
+ process.env.NODE_ENV = process.env.NODE_ENV || 'production';
34
+ // Start the server
35
+ const server = new proxy_1.ProxyServer(port);
36
+ server.start()
37
+ .then(() => {
38
+ console.log(`[AI Firewall] Server initialized successfully on port ${port}`);
39
+ console.log(`[AI Firewall] Health check: http://localhost:${port}/health`);
40
+ })
41
+ .catch((err) => {
42
+ console.error('[AI Firewall] Startup failed:', err);
43
+ process.exit(1);
44
+ });
45
+ // Handle graceful shutdown
46
+ process.on('SIGTERM', () => {
47
+ console.log('[AI Firewall] Received SIGTERM, shutting down gracefully...');
48
+ server.stop().then(() => process.exit(0));
49
+ });
50
+ process.on('SIGINT', () => {
51
+ console.log('[AI Firewall] Received SIGINT, shutting down gracefully...');
52
+ server.stop().then(() => process.exit(0));
53
+ });
54
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/bin/start.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;GAUG;;AAEH,oCAAuC;AAEvC,+BAA+B;AAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAwB,CAAC;AAE7B,kCAAkC;AAClC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;AAC1E,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC5C,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,8CAA8C;AAC9C,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1E,gBAAgB;AAChB,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;IAC5C,OAAO,CAAC,KAAK,CAAC,6CAA6C,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,yCAAyC;AACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,YAAY,CAAC;AAE5D,mBAAmB;AACnB,MAAM,MAAM,GAAG,IAAI,mBAAW,CAAC,IAAI,CAAC,CAAC;AAErC,MAAM,CAAC,KAAK,EAAE;KACX,IAAI,CAAC,GAAG,EAAE;IACT,OAAO,CAAC,GAAG,CAAC,yDAAyD,IAAI,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,gDAAgD,IAAI,SAAS,CAAC,CAAC;AAC7E,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,2BAA2B;AAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;IAC3E,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const demoRunner_1 = require("../demo/demoRunner");
6
+ const roiDashboard_1 = require("../dashboard/roiDashboard");
7
+ const compareExecution_1 = require("../demo/compareExecution");
8
+ const configServer_1 = require("../controlPlane/configServer");
9
+ /**
10
+ * This product is valuable only if users can SEE money saved instantly.
11
+ */
12
+ const program = new commander_1.Command();
13
+ program
14
+ .name('ai-firewall')
15
+ .description('A pre-execution firewall that shows and stops AI cost explosions in real time.')
16
+ .version('1.1.3');
17
+ program
18
+ .command('demo')
19
+ .description('Run screenshot-ready ROI demo')
20
+ .action(() => {
21
+ const result = (0, demoRunner_1.runDemo)();
22
+ console.log((0, demoRunner_1.formatDemoOutput)(result));
23
+ console.log('\nROI SUMMARY JSON');
24
+ console.log('----------------');
25
+ console.log(JSON.stringify((0, roiDashboard_1.toRoiDashboard)(result), null, 2));
26
+ });
27
+ program
28
+ .command('dashboard')
29
+ .description('Print ROI dashboard output')
30
+ .option('--json', 'Output JSON only')
31
+ .action(options => {
32
+ const result = (0, demoRunner_1.runDemo)();
33
+ const dashboard = (0, roiDashboard_1.toRoiDashboard)(result);
34
+ if (options.json) {
35
+ console.log(JSON.stringify(dashboard, null, 2));
36
+ return;
37
+ }
38
+ console.log((0, roiDashboard_1.formatRoiDashboardHuman)(dashboard));
39
+ });
40
+ program
41
+ .command('compare')
42
+ .description('Show before vs after firewall comparison')
43
+ .action(() => {
44
+ const comparison = (0, compareExecution_1.compareWithGuard)([0.12, 0.18, 0.31, 0.44, 0.52]);
45
+ console.log('BEFORE / AFTER COMPARISON');
46
+ console.log('=========================');
47
+ console.log(`COST WITHOUT FIREWALL: $${comparison.costWithoutFirewall.toFixed(2)}`);
48
+ console.log(`COST WITH FIREWALL: $${comparison.costWithFirewall.toFixed(2)}`);
49
+ console.log(`LOOPS DETECTED: ${comparison.loopsDetected}`);
50
+ console.log(`SAVINGS DIFFERENCE: $${comparison.savingsDifference.toFixed(2)}`);
51
+ });
52
+ program
53
+ .command('control-plane')
54
+ .description('Run control-plane v0 server')
55
+ .option('-p, --port <port>', 'Port number', '3001')
56
+ .action(options => {
57
+ const port = parseInt(options.port, 10);
58
+ const server = new configServer_1.ConfigServer();
59
+ server.listen(port);
60
+ console.log(`Control plane listening on http://localhost:${port}`);
61
+ console.log(`GET /dashboard | POST /config/update | GET /config/:key`);
62
+ });
63
+ program.parse();
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare const CLI_CONTRACT_VERSION: "1.0.0";
2
+ export interface CliMetricsContract {
3
+ total_cost_saved: number;
4
+ blocked_requests_count: number;
5
+ false_positive_indicator: number;
6
+ avg_analysis_latency_ms: number;
7
+ storage_backend: 'file' | 'redis';
8
+ }
9
+ export interface CliOutputContract<TPayload = Record<string, unknown>> {
10
+ schema: 'aifw.cli.output';
11
+ version: typeof CLI_CONTRACT_VERSION;
12
+ command: string;
13
+ timestamp: string;
14
+ payload: TPayload;
15
+ metrics: CliMetricsContract;
16
+ }
17
+ export declare function createCliOutputContract<TPayload>(command: string, payload: TPayload, metrics: CliMetricsContract): CliOutputContract<TPayload>;
18
+ export declare function validateCliOutputContract(value: unknown): value is CliOutputContract;
19
+ //# sourceMappingURL=outputContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputContract.d.ts","sourceRoot":"","sources":["../../src/cli/outputContract.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,EAAG,OAAgB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnE,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,OAAO,oBAAoB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAC9C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,kBAAkB,GAC1B,iBAAiB,CAAC,QAAQ,CAAC,CAY7B;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAkCpF"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CLI_CONTRACT_VERSION = void 0;
4
+ exports.createCliOutputContract = createCliOutputContract;
5
+ exports.validateCliOutputContract = validateCliOutputContract;
6
+ exports.CLI_CONTRACT_VERSION = '1.0.0';
7
+ function createCliOutputContract(command, payload, metrics) {
8
+ const output = {
9
+ schema: 'aifw.cli.output',
10
+ version: exports.CLI_CONTRACT_VERSION,
11
+ command,
12
+ timestamp: new Date().toISOString(),
13
+ payload,
14
+ metrics,
15
+ };
16
+ validateCliOutputContract(output);
17
+ return output;
18
+ }
19
+ function validateCliOutputContract(value) {
20
+ const candidate = value;
21
+ if (!candidate || typeof candidate !== 'object') {
22
+ throw new Error('Invalid CLI contract: expected object');
23
+ }
24
+ if (candidate.schema !== 'aifw.cli.output') {
25
+ throw new Error('Invalid CLI contract: schema mismatch');
26
+ }
27
+ if (candidate.version !== exports.CLI_CONTRACT_VERSION) {
28
+ throw new Error('Invalid CLI contract: unsupported version');
29
+ }
30
+ if (typeof candidate.command !== 'string' || candidate.command.length === 0) {
31
+ throw new Error('Invalid CLI contract: command required');
32
+ }
33
+ if (typeof candidate.timestamp !== 'string' || Number.isNaN(Date.parse(candidate.timestamp))) {
34
+ throw new Error('Invalid CLI contract: timestamp invalid');
35
+ }
36
+ if (!candidate.metrics || typeof candidate.metrics !== 'object') {
37
+ throw new Error('Invalid CLI contract: metrics missing');
38
+ }
39
+ const metrics = candidate.metrics;
40
+ const numericFields = [
41
+ metrics.total_cost_saved,
42
+ metrics.blocked_requests_count,
43
+ metrics.false_positive_indicator,
44
+ metrics.avg_analysis_latency_ms,
45
+ ];
46
+ if (numericFields.some((n) => typeof n !== 'number' || Number.isNaN(n))) {
47
+ throw new Error('Invalid CLI contract: numeric metrics invalid');
48
+ }
49
+ if (metrics.storage_backend !== 'file' && metrics.storage_backend !== 'redis') {
50
+ throw new Error('Invalid CLI contract: storage_backend invalid');
51
+ }
52
+ return true;
53
+ }
54
+ //# sourceMappingURL=outputContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outputContract.js","sourceRoot":"","sources":["../../src/cli/outputContract.ts"],"names":[],"mappings":";;;AAmBA,0DAgBC;AAED,8DAkCC;AAvEY,QAAA,oBAAoB,GAAG,OAAgB,CAAC;AAmBrD,SAAgB,uBAAuB,CACrC,OAAe,EACf,OAAiB,EACjB,OAA2B;IAE3B,MAAM,MAAM,GAAgC;QAC1C,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,4BAAoB;QAC7B,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,OAAO;QACP,OAAO;KACR,CAAC;IAEF,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,yBAAyB,CAAC,KAAc;IACtD,MAAM,SAAS,GAAG,KAA0B,CAAC;IAC7C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,SAAS,CAAC,OAAO,KAAK,4BAAoB,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,MAAM,aAAa,GAAG;QACpB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,wBAAwB;QAChC,OAAO,CAAC,uBAAuB;KAChC,CAAC;IACF,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,KAAK,MAAM,IAAI,OAAO,CAAC,eAAe,KAAK,OAAO,EAAE,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * CLI Persistent Storage Module
3
+ * Ensures state persists across separate CLI executions
4
+ * Uses ~/.aifw/history.jsonl for append-only storage
5
+ */
6
+ export interface CLIRequestRecord {
7
+ id: string;
8
+ timestamp: number;
9
+ model: string;
10
+ prompt: string;
11
+ promptHash: string;
12
+ estimatedCost: number;
13
+ dangerScore: number;
14
+ isDangerous: boolean;
15
+ category: string;
16
+ wasBlocked: boolean;
17
+ wasWarned: boolean;
18
+ reason?: string;
19
+ }
20
+ export interface CLIDetectionResult {
21
+ isDangerous: boolean;
22
+ dangerScore: number;
23
+ category: string;
24
+ reason: string;
25
+ action: 'allow' | 'warn' | 'block';
26
+ }
27
+ /**
28
+ * Load all request history from file
29
+ */
30
+ export declare function loadRequestHistory(): CLIRequestRecord[];
31
+ /**
32
+ * Get recent requests by hash (for duplicate detection)
33
+ */
34
+ export declare function getRecentRequestsByHash(hash: string, windowMs?: number): CLIRequestRecord[];
35
+ /**
36
+ * Get all recent requests (for fuzzy detection)
37
+ */
38
+ export declare function getRecentRequests(windowMs?: number): CLIRequestRecord[];
39
+ /**
40
+ * Append a request to persistent storage
41
+ */
42
+ export declare function appendRequest(record: CLIRequestRecord): void;
43
+ /**
44
+ * Get CLI statistics
45
+ */
46
+ export declare function getCLIStats(hours?: number): {
47
+ totalRequests: number;
48
+ blockedRequests: number;
49
+ warnedRequests: number;
50
+ totalCost: number;
51
+ preventedCost: number;
52
+ };
53
+ /**
54
+ * Get blocked requests for display
55
+ */
56
+ export declare function getBlockedRequests(limit?: number): CLIRequestRecord[];
57
+ /**
58
+ * Clear all history (for testing)
59
+ */
60
+ export declare function clearHistory(): void;
61
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/cli/storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;CACpC;AAcD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CAqBvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAc,GAAG,gBAAgB,EAAE,CAQlG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAgB,GAAG,gBAAgB,EAAE,CAKhF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAI5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,GAAE,MAAW,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,CAYA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,MAAW,GAAG,gBAAgB,EAAE,CAQzE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAInC"}