@salimassili/ai-costguard 1.1.5 → 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.
- package/README.md +72 -77
- package/dist/core/CostGuard.d.ts +27 -0
- package/dist/core/CostGuard.d.ts.map +1 -0
- package/dist/core/CostGuard.js +191 -0
- package/dist/core/CostGuard.js.map +1 -0
- package/dist/core/types.d.ts +28 -23
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +4 -2
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +14 -33
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -69
- package/dist/index.js.map +1 -1
- package/package.json +28 -65
- package/dist/aecl/ExecutionInterceptor.d.ts +0 -111
- package/dist/aecl/ExecutionInterceptor.d.ts.map +0 -1
- package/dist/aecl/ExecutionInterceptor.js +0 -280
- package/dist/aecl/ExecutionInterceptor.js.map +0 -1
- package/dist/aecl/ExecutionMemory.d.ts +0 -103
- package/dist/aecl/ExecutionMemory.d.ts.map +0 -1
- package/dist/aecl/ExecutionMemory.js +0 -164
- package/dist/aecl/ExecutionMemory.js.map +0 -1
- package/dist/aecl/PolicyEngine.d.ts +0 -77
- package/dist/aecl/PolicyEngine.d.ts.map +0 -1
- package/dist/aecl/PolicyEngine.js +0 -170
- package/dist/aecl/PolicyEngine.js.map +0 -1
- package/dist/aecl/ROITelemetry.d.ts +0 -110
- package/dist/aecl/ROITelemetry.d.ts.map +0 -1
- package/dist/aecl/ROITelemetry.js +0 -211
- package/dist/aecl/ROITelemetry.js.map +0 -1
- package/dist/aecl/RiskEngine.d.ts +0 -90
- package/dist/aecl/RiskEngine.d.ts.map +0 -1
- package/dist/aecl/RiskEngine.js +0 -207
- package/dist/aecl/RiskEngine.js.map +0 -1
- package/dist/aecl/index.d.ts +0 -76
- package/dist/aecl/index.d.ts.map +0 -1
- package/dist/aecl/index.js +0 -111
- package/dist/aecl/index.js.map +0 -1
- package/dist/aerl/ExecutionGraph.d.ts +0 -123
- package/dist/aerl/ExecutionGraph.d.ts.map +0 -1
- package/dist/aerl/ExecutionGraph.js +0 -289
- package/dist/aerl/ExecutionGraph.js.map +0 -1
- package/dist/aerl/ExecutionInterceptor.d.ts +0 -94
- package/dist/aerl/ExecutionInterceptor.d.ts.map +0 -1
- package/dist/aerl/ExecutionInterceptor.js +0 -246
- package/dist/aerl/ExecutionInterceptor.js.map +0 -1
- package/dist/aerl/ExecutionMemory.d.ts +0 -138
- package/dist/aerl/ExecutionMemory.d.ts.map +0 -1
- package/dist/aerl/ExecutionMemory.js +0 -284
- package/dist/aerl/ExecutionMemory.js.map +0 -1
- package/dist/aerl/FailurePrediction.d.ts +0 -71
- package/dist/aerl/FailurePrediction.d.ts.map +0 -1
- package/dist/aerl/FailurePrediction.js +0 -204
- package/dist/aerl/FailurePrediction.js.map +0 -1
- package/dist/aerl/RecoveryEngine.d.ts +0 -74
- package/dist/aerl/RecoveryEngine.d.ts.map +0 -1
- package/dist/aerl/RecoveryEngine.js +0 -194
- package/dist/aerl/RecoveryEngine.js.map +0 -1
- package/dist/aerl/ReliabilityEngine.d.ts +0 -74
- package/dist/aerl/ReliabilityEngine.d.ts.map +0 -1
- package/dist/aerl/ReliabilityEngine.js +0 -205
- package/dist/aerl/ReliabilityEngine.js.map +0 -1
- package/dist/aerl/ReliabilityTelemetry.d.ts +0 -118
- package/dist/aerl/ReliabilityTelemetry.d.ts.map +0 -1
- package/dist/aerl/ReliabilityTelemetry.js +0 -247
- package/dist/aerl/ReliabilityTelemetry.js.map +0 -1
- package/dist/aerl/index.d.ts +0 -170
- package/dist/aerl/index.d.ts.map +0 -1
- package/dist/aerl/index.js +0 -223
- package/dist/aerl/index.js.map +0 -1
- package/dist/ambient/AmbientProtection.d.ts +0 -79
- package/dist/ambient/AmbientProtection.d.ts.map +0 -1
- package/dist/ambient/AmbientProtection.js +0 -251
- package/dist/ambient/AmbientProtection.js.map +0 -1
- package/dist/bin/start.d.ts +0 -14
- package/dist/bin/start.d.ts.map +0 -1
- package/dist/bin/start.js +0 -54
- package/dist/bin/start.js.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -64
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/outputContract.d.ts +0 -19
- package/dist/cli/outputContract.d.ts.map +0 -1
- package/dist/cli/outputContract.js +0 -54
- package/dist/cli/outputContract.js.map +0 -1
- package/dist/cli/storage.d.ts +0 -61
- package/dist/cli/storage.d.ts.map +0 -1
- package/dist/cli/storage.js +0 -143
- package/dist/cli/storage.js.map +0 -1
- package/dist/client.d.ts +0 -29
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -58
- package/dist/client.js.map +0 -1
- package/dist/config/constants.d.ts +0 -109
- package/dist/config/constants.d.ts.map +0 -1
- package/dist/config/constants.js +0 -151
- package/dist/config/constants.js.map +0 -1
- package/dist/config/index.d.ts +0 -5
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -21
- package/dist/config/index.js.map +0 -1
- package/dist/config/pricing.d.ts +0 -12
- package/dist/config/pricing.d.ts.map +0 -1
- package/dist/config/pricing.js +0 -45
- package/dist/config/pricing.js.map +0 -1
- package/dist/config/productionConfig.d.ts +0 -8
- package/dist/config/productionConfig.d.ts.map +0 -1
- package/dist/config/productionConfig.js +0 -21
- package/dist/config/productionConfig.js.map +0 -1
- package/dist/config/userConfig.d.ts +0 -31
- package/dist/config/userConfig.d.ts.map +0 -1
- package/dist/config/userConfig.js +0 -116
- package/dist/config/userConfig.js.map +0 -1
- package/dist/controlPlane/configServer.d.ts +0 -7
- package/dist/controlPlane/configServer.d.ts.map +0 -1
- package/dist/controlPlane/configServer.js +0 -47
- package/dist/controlPlane/configServer.js.map +0 -1
- package/dist/core/AgentBehaviorGraph.d.ts +0 -163
- package/dist/core/AgentBehaviorGraph.d.ts.map +0 -1
- package/dist/core/AgentBehaviorGraph.js +0 -341
- package/dist/core/AgentBehaviorGraph.js.map +0 -1
- package/dist/core/AlertManager.d.ts +0 -19
- package/dist/core/AlertManager.d.ts.map +0 -1
- package/dist/core/AlertManager.js +0 -64
- package/dist/core/AlertManager.js.map +0 -1
- package/dist/core/AuditTrail.d.ts +0 -107
- package/dist/core/AuditTrail.d.ts.map +0 -1
- package/dist/core/AuditTrail.js +0 -256
- package/dist/core/AuditTrail.js.map +0 -1
- package/dist/core/CostLedger.d.ts +0 -135
- package/dist/core/CostLedger.d.ts.map +0 -1
- package/dist/core/CostLedger.js +0 -224
- package/dist/core/CostLedger.js.map +0 -1
- package/dist/core/CostPredictionEngine.d.ts +0 -110
- package/dist/core/CostPredictionEngine.d.ts.map +0 -1
- package/dist/core/CostPredictionEngine.js +0 -225
- package/dist/core/CostPredictionEngine.js.map +0 -1
- package/dist/core/CostTruthEngine.d.ts +0 -108
- package/dist/core/CostTruthEngine.d.ts.map +0 -1
- package/dist/core/CostTruthEngine.js +0 -170
- package/dist/core/CostTruthEngine.js.map +0 -1
- package/dist/core/DetectionEngine.d.ts +0 -147
- package/dist/core/DetectionEngine.d.ts.map +0 -1
- package/dist/core/DetectionEngine.js +0 -429
- package/dist/core/DetectionEngine.js.map +0 -1
- package/dist/core/ExecutionInterceptor.d.ts +0 -135
- package/dist/core/ExecutionInterceptor.d.ts.map +0 -1
- package/dist/core/ExecutionInterceptor.js +0 -285
- package/dist/core/ExecutionInterceptor.js.map +0 -1
- package/dist/core/ExplainabilityLayer.d.ts +0 -109
- package/dist/core/ExplainabilityLayer.d.ts.map +0 -1
- package/dist/core/ExplainabilityLayer.js +0 -277
- package/dist/core/ExplainabilityLayer.js.map +0 -1
- package/dist/core/LearningSystem.d.ts +0 -124
- package/dist/core/LearningSystem.d.ts.map +0 -1
- package/dist/core/LearningSystem.js +0 -294
- package/dist/core/LearningSystem.js.map +0 -1
- package/dist/core/Logger.d.ts +0 -122
- package/dist/core/Logger.d.ts.map +0 -1
- package/dist/core/Logger.js +0 -233
- package/dist/core/Logger.js.map +0 -1
- package/dist/core/PolicyEngine.d.ts +0 -148
- package/dist/core/PolicyEngine.d.ts.map +0 -1
- package/dist/core/PolicyEngine.js +0 -336
- package/dist/core/PolicyEngine.js.map +0 -1
- package/dist/core/PricingConfig.d.ts +0 -55
- package/dist/core/PricingConfig.d.ts.map +0 -1
- package/dist/core/PricingConfig.js +0 -132
- package/dist/core/PricingConfig.js.map +0 -1
- package/dist/core/SessionStats.d.ts +0 -101
- package/dist/core/SessionStats.d.ts.map +0 -1
- package/dist/core/SessionStats.js +0 -261
- package/dist/core/SessionStats.js.map +0 -1
- package/dist/core/StateStore.d.ts +0 -100
- package/dist/core/StateStore.d.ts.map +0 -1
- package/dist/core/StateStore.js +0 -336
- package/dist/core/StateStore.js.map +0 -1
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -19
- package/dist/core/index.js.map +0 -1
- package/dist/cost-guard.d.ts +0 -41
- package/dist/cost-guard.d.ts.map +0 -1
- package/dist/cost-guard.js +0 -274
- package/dist/cost-guard.js.map +0 -1
- package/dist/dashboard/roiDashboard.d.ts +0 -12
- package/dist/dashboard/roiDashboard.d.ts.map +0 -1
- package/dist/dashboard/roiDashboard.js +0 -28
- package/dist/dashboard/roiDashboard.js.map +0 -1
- package/dist/demo/compareExecution.d.ts +0 -9
- package/dist/demo/compareExecution.d.ts.map +0 -1
- package/dist/demo/compareExecution.js +0 -43
- package/dist/demo/compareExecution.js.map +0 -1
- package/dist/demo/demoRunner.d.ts +0 -16
- package/dist/demo/demoRunner.d.ts.map +0 -1
- package/dist/demo/demoRunner.js +0 -73
- package/dist/demo/demoRunner.js.map +0 -1
- package/dist/firewall/costEstimator.d.ts +0 -3
- package/dist/firewall/costEstimator.d.ts.map +0 -1
- package/dist/firewall/costEstimator.js +0 -22
- package/dist/firewall/costEstimator.js.map +0 -1
- package/dist/firewall/executionGuard.d.ts +0 -18
- package/dist/firewall/executionGuard.d.ts.map +0 -1
- package/dist/firewall/executionGuard.js +0 -80
- package/dist/firewall/executionGuard.js.map +0 -1
- package/dist/firewall/loopDetector.d.ts +0 -13
- package/dist/firewall/loopDetector.d.ts.map +0 -1
- package/dist/firewall/loopDetector.js +0 -24
- package/dist/firewall/loopDetector.js.map +0 -1
- package/dist/firewall/policy.d.ts +0 -4
- package/dist/firewall/policy.d.ts.map +0 -1
- package/dist/firewall/policy.js +0 -16
- package/dist/firewall/policy.js.map +0 -1
- package/dist/firewall/types.d.ts +0 -38
- package/dist/firewall/types.d.ts.map +0 -1
- package/dist/firewall/types.js +0 -3
- package/dist/firewall/types.js.map +0 -1
- package/dist/logger/console.d.ts +0 -27
- package/dist/logger/console.d.ts.map +0 -1
- package/dist/logger/console.js +0 -68
- package/dist/logger/console.js.map +0 -1
- package/dist/logger/database.d.ts +0 -40
- package/dist/logger/database.d.ts.map +0 -1
- package/dist/logger/database.js +0 -127
- package/dist/logger/database.js.map +0 -1
- package/dist/logger/index.d.ts +0 -3
- package/dist/logger/index.d.ts.map +0 -1
- package/dist/logger/index.js +0 -11
- package/dist/logger/index.js.map +0 -1
- package/dist/loop-shield.d.ts +0 -48
- package/dist/loop-shield.d.ts.map +0 -1
- package/dist/loop-shield.js +0 -436
- package/dist/loop-shield.js.map +0 -1
- package/dist/metrics/BusinessMetricsEngine.d.ts +0 -109
- package/dist/metrics/BusinessMetricsEngine.d.ts.map +0 -1
- package/dist/metrics/BusinessMetricsEngine.js +0 -222
- package/dist/metrics/BusinessMetricsEngine.js.map +0 -1
- package/dist/metrics/index.d.ts +0 -11
- package/dist/metrics/index.d.ts.map +0 -1
- package/dist/metrics/index.js +0 -17
- package/dist/metrics/index.js.map +0 -1
- package/dist/middleware/expressFirewall.d.ts +0 -51
- package/dist/middleware/expressFirewall.d.ts.map +0 -1
- package/dist/middleware/expressFirewall.js +0 -140
- package/dist/middleware/expressFirewall.js.map +0 -1
- package/dist/middleware/index.d.ts +0 -8
- package/dist/middleware/index.d.ts.map +0 -1
- package/dist/middleware/index.js +0 -15
- package/dist/middleware/index.js.map +0 -1
- package/dist/middleware/withFirewall.d.ts +0 -50
- package/dist/middleware/withFirewall.d.ts.map +0 -1
- package/dist/middleware/withFirewall.js +0 -155
- package/dist/middleware/withFirewall.js.map +0 -1
- package/dist/observability/logger.d.ts +0 -14
- package/dist/observability/logger.d.ts.map +0 -1
- package/dist/observability/logger.js +0 -21
- package/dist/observability/logger.js.map +0 -1
- package/dist/observability/metrics.d.ts +0 -17
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js +0 -36
- package/dist/observability/metrics.js.map +0 -1
- package/dist/os/ExecutionOS.d.ts +0 -220
- package/dist/os/ExecutionOS.d.ts.map +0 -1
- package/dist/os/ExecutionOS.js +0 -398
- package/dist/os/ExecutionOS.js.map +0 -1
- package/dist/os/GlobalIntelligence.d.ts +0 -154
- package/dist/os/GlobalIntelligence.d.ts.map +0 -1
- package/dist/os/GlobalIntelligence.js +0 -374
- package/dist/os/GlobalIntelligence.js.map +0 -1
- package/dist/os/PolicyMarketplace.d.ts +0 -192
- package/dist/os/PolicyMarketplace.d.ts.map +0 -1
- package/dist/os/PolicyMarketplace.js +0 -384
- package/dist/os/PolicyMarketplace.js.map +0 -1
- package/dist/os/SDKInterception.d.ts +0 -115
- package/dist/os/SDKInterception.d.ts.map +0 -1
- package/dist/os/SDKInterception.js +0 -317
- package/dist/os/SDKInterception.js.map +0 -1
- package/dist/os/index.d.ts +0 -60
- package/dist/os/index.d.ts.map +0 -1
- package/dist/os/index.js +0 -82
- package/dist/os/index.js.map +0 -1
- package/dist/proxy/index.d.ts +0 -2
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js +0 -18
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/server.d.ts +0 -24
- package/dist/proxy/server.d.ts.map +0 -1
- package/dist/proxy/server.js +0 -395
- package/dist/proxy/server.js.map +0 -1
- package/dist/public/BenchmarksPage.d.ts +0 -60
- package/dist/public/BenchmarksPage.d.ts.map +0 -1
- package/dist/public/BenchmarksPage.js +0 -397
- package/dist/public/BenchmarksPage.js.map +0 -1
- package/dist/public/DocsPage.d.ts +0 -11
- package/dist/public/DocsPage.d.ts.map +0 -1
- package/dist/public/DocsPage.js +0 -496
- package/dist/public/DocsPage.js.map +0 -1
- package/dist/public/StatusPage.d.ts +0 -55
- package/dist/public/StatusPage.d.ts.map +0 -1
- package/dist/public/StatusPage.js +0 -344
- package/dist/public/StatusPage.js.map +0 -1
- package/dist/public/index.d.ts +0 -12
- package/dist/public/index.d.ts.map +0 -1
- package/dist/public/index.js +0 -20
- package/dist/public/index.js.map +0 -1
- package/dist/replacements/axios.d.ts +0 -14
- package/dist/replacements/axios.d.ts.map +0 -1
- package/dist/replacements/axios.js +0 -35
- package/dist/replacements/axios.js.map +0 -1
- package/dist/replacements/fetch.d.ts +0 -13
- package/dist/replacements/fetch.d.ts.map +0 -1
- package/dist/replacements/fetch.js +0 -20
- package/dist/replacements/fetch.js.map +0 -1
- package/dist/replacements/openai.d.ts +0 -14
- package/dist/replacements/openai.d.ts.map +0 -1
- package/dist/replacements/openai.js +0 -22
- package/dist/replacements/openai.js.map +0 -1
- package/dist/saas/CostExplosionDemo.d.ts +0 -56
- package/dist/saas/CostExplosionDemo.d.ts.map +0 -1
- package/dist/saas/CostExplosionDemo.js +0 -190
- package/dist/saas/CostExplosionDemo.js.map +0 -1
- package/dist/saas/LiveProtection.d.ts +0 -61
- package/dist/saas/LiveProtection.d.ts.map +0 -1
- package/dist/saas/LiveProtection.js +0 -187
- package/dist/saas/LiveProtection.js.map +0 -1
- package/dist/saas/ProductionSaaS.d.ts +0 -56
- package/dist/saas/ProductionSaaS.d.ts.map +0 -1
- package/dist/saas/ProductionSaaS.js +0 -831
- package/dist/saas/ProductionSaaS.js.map +0 -1
- package/dist/saas/SaaSServer.d.ts +0 -50
- package/dist/saas/SaaSServer.d.ts.map +0 -1
- package/dist/saas/SaaSServer.js +0 -669
- package/dist/saas/SaaSServer.js.map +0 -1
- package/dist/saas/UserStore.d.ts +0 -49
- package/dist/saas/UserStore.d.ts.map +0 -1
- package/dist/saas/UserStore.js +0 -137
- package/dist/saas/UserStore.js.map +0 -1
- package/dist/saas/billingMetrics.d.ts +0 -14
- package/dist/saas/billingMetrics.d.ts.map +0 -1
- package/dist/saas/billingMetrics.js +0 -23
- package/dist/saas/billingMetrics.js.map +0 -1
- package/dist/saas/index.d.ts +0 -12
- package/dist/saas/index.d.ts.map +0 -1
- package/dist/saas/index.js +0 -23
- package/dist/saas/index.js.map +0 -1
- package/dist/saas/telemetry.d.ts +0 -24
- package/dist/saas/telemetry.d.ts.map +0 -1
- package/dist/saas/telemetry.js +0 -30
- package/dist/saas/telemetry.js.map +0 -1
- package/dist/saas/usageMeter.d.ts +0 -28
- package/dist/saas/usageMeter.d.ts.map +0 -1
- package/dist/saas/usageMeter.js +0 -41
- package/dist/saas/usageMeter.js.map +0 -1
- package/dist/security/TrustBoundaryValidator.d.ts +0 -105
- package/dist/security/TrustBoundaryValidator.d.ts.map +0 -1
- package/dist/security/TrustBoundaryValidator.js +0 -305
- package/dist/security/TrustBoundaryValidator.js.map +0 -1
- package/dist/starters/express-protected.d.ts +0 -18
- package/dist/starters/express-protected.d.ts.map +0 -1
- package/dist/starters/express-protected.js +0 -93
- package/dist/starters/express-protected.js.map +0 -1
- package/dist/starters/langchain-protected.d.ts +0 -18
- package/dist/starters/langchain-protected.d.ts.map +0 -1
- package/dist/starters/langchain-protected.js +0 -85
- package/dist/starters/langchain-protected.js.map +0 -1
- package/dist/starters/openai-protected.d.ts +0 -19
- package/dist/starters/openai-protected.d.ts.map +0 -1
- package/dist/starters/openai-protected.js +0 -84
- package/dist/starters/openai-protected.js.map +0 -1
- package/dist/starters/serverless-protected.d.ts +0 -19
- package/dist/starters/serverless-protected.d.ts.map +0 -1
- package/dist/starters/serverless-protected.js +0 -83
- package/dist/starters/serverless-protected.js.map +0 -1
- package/dist/storage/adapters.d.ts +0 -24
- package/dist/storage/adapters.d.ts.map +0 -1
- package/dist/storage/adapters.js +0 -123
- package/dist/storage/adapters.js.map +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -8
- package/dist/storage/index.js.map +0 -1
- package/dist/tests/b2b-hardening.test.d.ts +0 -2
- package/dist/tests/b2b-hardening.test.d.ts.map +0 -1
- package/dist/tests/b2b-hardening.test.js +0 -164
- package/dist/tests/b2b-hardening.test.js.map +0 -1
- package/dist/tests/cli.contract.test.d.ts +0 -2
- package/dist/tests/cli.contract.test.d.ts.map +0 -1
- package/dist/tests/cli.contract.test.js +0 -28
- package/dist/tests/cli.contract.test.js.map +0 -1
- package/dist/tests/cli.snapshot.test.d.ts +0 -14
- package/dist/tests/cli.snapshot.test.d.ts.map +0 -1
- package/dist/tests/cli.snapshot.test.js +0 -132
- package/dist/tests/cli.snapshot.test.js.map +0 -1
- package/dist/tests/cli.strict.test.d.ts +0 -6
- package/dist/tests/cli.strict.test.d.ts.map +0 -1
- package/dist/tests/cli.strict.test.js +0 -173
- package/dist/tests/cli.strict.test.js.map +0 -1
- package/dist/tests/cli.test.d.ts +0 -5
- package/dist/tests/cli.test.d.ts.map +0 -1
- package/dist/tests/cli.test.js +0 -54
- package/dist/tests/cli.test.js.map +0 -1
- package/dist/tests/concurrency.state.test.d.ts +0 -6
- package/dist/tests/concurrency.state.test.d.ts.map +0 -1
- package/dist/tests/concurrency.state.test.js +0 -231
- package/dist/tests/concurrency.state.test.js.map +0 -1
- package/dist/tests/detection-engine.strict.test.d.ts +0 -6
- package/dist/tests/detection-engine.strict.test.d.ts.map +0 -1
- package/dist/tests/detection-engine.strict.test.js +0 -323
- package/dist/tests/detection-engine.strict.test.js.map +0 -1
- package/dist/tests/e2e.system.test.d.ts +0 -7
- package/dist/tests/e2e.system.test.d.ts.map +0 -1
- package/dist/tests/e2e.system.test.js +0 -189
- package/dist/tests/e2e.system.test.js.map +0 -1
- package/dist/tests/edge-cases.test.d.ts +0 -6
- package/dist/tests/edge-cases.test.d.ts.map +0 -1
- package/dist/tests/edge-cases.test.js +0 -357
- package/dist/tests/edge-cases.test.js.map +0 -1
- package/dist/tests/performance.benchmark.test.d.ts +0 -2
- package/dist/tests/performance.benchmark.test.d.ts.map +0 -1
- package/dist/tests/performance.benchmark.test.js +0 -24
- package/dist/tests/performance.benchmark.test.js.map +0 -1
- package/dist/tests/proxy.production.test.d.ts +0 -6
- package/dist/tests/proxy.production.test.d.ts.map +0 -1
- package/dist/tests/proxy.production.test.js +0 -274
- package/dist/tests/proxy.production.test.js.map +0 -1
- package/dist/tests/proxy.strict.test.d.ts +0 -6
- package/dist/tests/proxy.strict.test.d.ts.map +0 -1
- package/dist/tests/proxy.strict.test.js +0 -188
- package/dist/tests/proxy.strict.test.js.map +0 -1
- package/dist/tests/proxy.test.d.ts +0 -5
- package/dist/tests/proxy.test.d.ts.map +0 -1
- package/dist/tests/proxy.test.js +0 -61
- package/dist/tests/proxy.test.js.map +0 -1
- package/dist/tests/roi.scenario.test.d.ts +0 -2
- package/dist/tests/roi.scenario.test.d.ts.map +0 -1
- package/dist/tests/roi.scenario.test.js +0 -26
- package/dist/tests/roi.scenario.test.js.map +0 -1
- package/dist/tests/server.contract.test.d.ts +0 -6
- package/dist/tests/server.contract.test.d.ts.map +0 -1
- package/dist/tests/server.contract.test.js +0 -48
- package/dist/tests/server.contract.test.js.map +0 -1
- package/dist/tests/tokenCounter.test.d.ts +0 -5
- package/dist/tests/tokenCounter.test.d.ts.map +0 -1
- package/dist/tests/tokenCounter.test.js +0 -66
- package/dist/tests/tokenCounter.test.js.map +0 -1
- package/dist/tests/v113/client.test.d.ts +0 -2
- package/dist/tests/v113/client.test.d.ts.map +0 -1
- package/dist/tests/v113/client.test.js +0 -22
- package/dist/tests/v113/client.test.js.map +0 -1
- package/dist/tests/v113/executionGuard.test.d.ts +0 -2
- package/dist/tests/v113/executionGuard.test.d.ts.map +0 -1
- package/dist/tests/v113/executionGuard.test.js +0 -39
- package/dist/tests/v113/executionGuard.test.js.map +0 -1
- package/dist/token-counter/index.d.ts +0 -2
- package/dist/token-counter/index.d.ts.map +0 -1
- package/dist/token-counter/index.js +0 -18
- package/dist/token-counter/index.js.map +0 -1
- package/dist/token-counter/tokenCounter.d.ts +0 -18
- package/dist/token-counter/tokenCounter.d.ts.map +0 -1
- package/dist/token-counter/tokenCounter.js +0 -91
- package/dist/token-counter/tokenCounter.js.map +0 -1
- package/dist/trust/ImmutableAudit.d.ts +0 -159
- package/dist/trust/ImmutableAudit.d.ts.map +0 -1
- package/dist/trust/ImmutableAudit.js +0 -340
- package/dist/trust/ImmutableAudit.js.map +0 -1
- package/dist/trust/PublicVerificationLedger.d.ts +0 -91
- package/dist/trust/PublicVerificationLedger.d.ts.map +0 -1
- package/dist/trust/PublicVerificationLedger.js +0 -223
- package/dist/trust/PublicVerificationLedger.js.map +0 -1
- package/dist/trust/index.d.ts +0 -11
- package/dist/trust/index.d.ts.map +0 -1
- package/dist/trust/index.js +0 -20
- package/dist/trust/index.js.map +0 -1
- package/dist/utils/alert.d.ts +0 -13
- package/dist/utils/alert.d.ts.map +0 -1
- package/dist/utils/alert.js +0 -49
- package/dist/utils/alert.js.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -18
- package/dist/utils/index.js.map +0 -1
- package/dist/wrapper/aiFirewall.d.ts +0 -61
- package/dist/wrapper/aiFirewall.d.ts.map +0 -1
- package/dist/wrapper/aiFirewall.js +0 -117
- package/dist/wrapper/aiFirewall.js.map +0 -1
- package/dist/wrapper/index.d.ts +0 -3
- package/dist/wrapper/index.d.ts.map +0 -1
- package/dist/wrapper/index.js +0 -21
- package/dist/wrapper/index.js.map +0 -1
- package/dist/wrapper/sdk.d.ts +0 -49
- package/dist/wrapper/sdk.d.ts.map +0 -1
- package/dist/wrapper/sdk.js +0 -140
- package/dist/wrapper/sdk.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,112 +1,107 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AI CostGuard
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The kill-switch for AI agents.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Prevent runaway AI agent loops, token bombs, and budget explosions before they happen.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install @salimassili/ai-costguard
|
|
9
|
+
```
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
2. **Uncontrolled API spending** → No visibility into per-request costs
|
|
11
|
-
3. **Production LLM cost spikes** → Sudden $10K+ surprises at month-end
|
|
11
|
+
## Install & Protect (30 seconds)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
```ts
|
|
14
|
+
import { withCostGuard } from '@salimassili/ai-costguard';
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const openai = withCostGuard(client, {
|
|
17
|
+
maxTotalCostPerDay: 5
|
|
18
|
+
});
|
|
19
|
+
```
|
|
18
20
|
|
|
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
|
|
21
27
|
```
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
A financial save event. Not a vague error.
|
|
24
30
|
|
|
25
|
-
##
|
|
31
|
+
## Why This Exists
|
|
26
32
|
|
|
27
|
-
|
|
28
|
-
import OpenAI from 'openai';
|
|
29
|
-
import { initFirewall, withFirewall } from 'ai-firewall';
|
|
33
|
+
AI agents don't fail gracefully. They fail exponentially.
|
|
30
34
|
|
|
31
|
-
|
|
32
|
-
const openai = withFirewall(new OpenAI({ apiKey: process.env.OPENAI_API_KEY! }));
|
|
35
|
+
A stuck agent can burn hundreds of dollars in API credits overnight. Not because it's fast. Because it's relentless.
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
model: 'gpt-4o-mini',
|
|
36
|
-
prompt: 'Summarize these tickets',
|
|
37
|
-
maxOutputTokens: 240,
|
|
38
|
-
});
|
|
37
|
+
Your agent framework has no kill-switch. Rate limiters don't detect semantic loops. Cost alerts tell you after the money is gone.
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
await openai.chat.completions.create({
|
|
42
|
-
model: 'gpt-4o-mini',
|
|
43
|
-
messages: [{ role: 'user', content: 'Summarize these tickets' }],
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
```
|
|
39
|
+
This is the missing layer.
|
|
47
40
|
|
|
48
|
-
##
|
|
41
|
+
## Real-World Protection
|
|
49
42
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- Hash-chained audit trail (tamper-evident)
|
|
53
|
-
- Replay any execution for debugging
|
|
54
|
-
- Compliance certificates for audits
|
|
43
|
+
### 1. Recursive Loop
|
|
44
|
+
Agent repeats the same reasoning forever.
|
|
55
45
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- Always returns a decision (never crashes execution)
|
|
59
|
-
- Automatic fallback to safe defaults
|
|
60
|
-
- Sub-100ms decision latency guaranteed
|
|
46
|
+
### 2. Tool Retry Explosion
|
|
47
|
+
Agent retries a failing tool endlessly.
|
|
61
48
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
import { replaySession, generateComplianceReport } from 'ai-firewall';
|
|
49
|
+
### 3. Budget Breach
|
|
50
|
+
Agent burns tokens rapidly until blocked.
|
|
65
51
|
|
|
66
|
-
|
|
67
|
-
const result = replaySession('session-123');
|
|
68
|
-
console.log(result.summary); // "All 50 decisions replayed identically"
|
|
52
|
+
## API
|
|
69
53
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
+
})
|
|
73
61
|
```
|
|
74
62
|
|
|
75
|
-
##
|
|
63
|
+
## Example
|
|
76
64
|
|
|
77
|
-
**Shareable Demo Links:**
|
|
78
65
|
```ts
|
|
79
|
-
import {
|
|
66
|
+
import { withCostGuard, CostGuardError } from '@salimassili/ai-costguard';
|
|
80
67
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
68
|
+
const openai = withCostGuard(
|
|
69
|
+
new OpenAI({ apiKey: process.env.OPENAI_API_KEY }),
|
|
70
|
+
{ maxTotalCostPerDay: 5 }
|
|
71
|
+
);
|
|
84
72
|
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
|
|
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
|
+
}
|
|
88
84
|
```
|
|
89
85
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
## Express Middleware
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
import { costGuardMiddleware } from '@salimassili/ai-costguard';
|
|
94
90
|
|
|
95
|
-
|
|
96
|
-
# → http://localhost:3001/demo
|
|
91
|
+
app.use(costGuardMiddleware({ maxTotalCostPerDay: 10 }));
|
|
97
92
|
```
|
|
98
93
|
|
|
99
|
-
##
|
|
94
|
+
## Features
|
|
100
95
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
|
105
100
|
|
|
106
|
-
|
|
107
|
-
✅ **Only production API spending control**
|
|
108
|
-
✅ **Only runaway agent detection**
|
|
101
|
+
## Install Before You Deploy
|
|
109
102
|
|
|
110
|
-
|
|
103
|
+
```bash
|
|
104
|
+
npm install @salimassili/ai-costguard
|
|
105
|
+
```
|
|
111
106
|
|
|
112
|
-
|
|
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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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,
|
|
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"}
|
package/dist/core/types.js
CHANGED
package/dist/core/types.js.map
CHANGED
|
@@ -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
|
|
2
|
+
* AI CostGuard — AI Agent Loop & Cost Firewall
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Detects infinite loops in autonomous AI agents and kills them
|
|
5
|
+
* before they burn your API budget.
|
|
5
6
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
7
|
+
* Wraps your AI client. Enforces hard limits.
|
|
8
|
+
* When it blocks, it tells you exactly how much it saved.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
+
* @example
|
|
11
|
+
* import { OpenAI } from 'openai';
|
|
12
|
+
* import { withCostGuard } from '@salimassili/ai-costguard';
|
|
10
13
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
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
|
-
|
|
18
|
-
export {
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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"}
|