@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.
- package/README.md +112 -0
- package/dist/aecl/ExecutionInterceptor.d.ts +111 -0
- package/dist/aecl/ExecutionInterceptor.d.ts.map +1 -0
- package/dist/aecl/ExecutionInterceptor.js +280 -0
- package/dist/aecl/ExecutionInterceptor.js.map +1 -0
- package/dist/aecl/ExecutionMemory.d.ts +103 -0
- package/dist/aecl/ExecutionMemory.d.ts.map +1 -0
- package/dist/aecl/ExecutionMemory.js +164 -0
- package/dist/aecl/ExecutionMemory.js.map +1 -0
- package/dist/aecl/PolicyEngine.d.ts +77 -0
- package/dist/aecl/PolicyEngine.d.ts.map +1 -0
- package/dist/aecl/PolicyEngine.js +170 -0
- package/dist/aecl/PolicyEngine.js.map +1 -0
- package/dist/aecl/ROITelemetry.d.ts +110 -0
- package/dist/aecl/ROITelemetry.d.ts.map +1 -0
- package/dist/aecl/ROITelemetry.js +211 -0
- package/dist/aecl/ROITelemetry.js.map +1 -0
- package/dist/aecl/RiskEngine.d.ts +90 -0
- package/dist/aecl/RiskEngine.d.ts.map +1 -0
- package/dist/aecl/RiskEngine.js +207 -0
- package/dist/aecl/RiskEngine.js.map +1 -0
- package/dist/aecl/index.d.ts +76 -0
- package/dist/aecl/index.d.ts.map +1 -0
- package/dist/aecl/index.js +111 -0
- package/dist/aecl/index.js.map +1 -0
- package/dist/aerl/ExecutionGraph.d.ts +123 -0
- package/dist/aerl/ExecutionGraph.d.ts.map +1 -0
- package/dist/aerl/ExecutionGraph.js +289 -0
- package/dist/aerl/ExecutionGraph.js.map +1 -0
- package/dist/aerl/ExecutionInterceptor.d.ts +94 -0
- package/dist/aerl/ExecutionInterceptor.d.ts.map +1 -0
- package/dist/aerl/ExecutionInterceptor.js +246 -0
- package/dist/aerl/ExecutionInterceptor.js.map +1 -0
- package/dist/aerl/ExecutionMemory.d.ts +138 -0
- package/dist/aerl/ExecutionMemory.d.ts.map +1 -0
- package/dist/aerl/ExecutionMemory.js +284 -0
- package/dist/aerl/ExecutionMemory.js.map +1 -0
- package/dist/aerl/FailurePrediction.d.ts +71 -0
- package/dist/aerl/FailurePrediction.d.ts.map +1 -0
- package/dist/aerl/FailurePrediction.js +204 -0
- package/dist/aerl/FailurePrediction.js.map +1 -0
- package/dist/aerl/RecoveryEngine.d.ts +74 -0
- package/dist/aerl/RecoveryEngine.d.ts.map +1 -0
- package/dist/aerl/RecoveryEngine.js +194 -0
- package/dist/aerl/RecoveryEngine.js.map +1 -0
- package/dist/aerl/ReliabilityEngine.d.ts +74 -0
- package/dist/aerl/ReliabilityEngine.d.ts.map +1 -0
- package/dist/aerl/ReliabilityEngine.js +205 -0
- package/dist/aerl/ReliabilityEngine.js.map +1 -0
- package/dist/aerl/ReliabilityTelemetry.d.ts +118 -0
- package/dist/aerl/ReliabilityTelemetry.d.ts.map +1 -0
- package/dist/aerl/ReliabilityTelemetry.js +247 -0
- package/dist/aerl/ReliabilityTelemetry.js.map +1 -0
- package/dist/aerl/index.d.ts +170 -0
- package/dist/aerl/index.d.ts.map +1 -0
- package/dist/aerl/index.js +223 -0
- package/dist/aerl/index.js.map +1 -0
- package/dist/ambient/AmbientProtection.d.ts +79 -0
- package/dist/ambient/AmbientProtection.d.ts.map +1 -0
- package/dist/ambient/AmbientProtection.js +251 -0
- package/dist/ambient/AmbientProtection.js.map +1 -0
- package/dist/bin/start.d.ts +14 -0
- package/dist/bin/start.d.ts.map +1 -0
- package/dist/bin/start.js +54 -0
- package/dist/bin/start.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +64 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/outputContract.d.ts +19 -0
- package/dist/cli/outputContract.d.ts.map +1 -0
- package/dist/cli/outputContract.js +54 -0
- package/dist/cli/outputContract.js.map +1 -0
- package/dist/cli/storage.d.ts +61 -0
- package/dist/cli/storage.d.ts.map +1 -0
- package/dist/cli/storage.js +143 -0
- package/dist/cli/storage.js.map +1 -0
- package/dist/client.d.ts +29 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +58 -0
- package/dist/client.js.map +1 -0
- package/dist/config/constants.d.ts +109 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +151 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/pricing.d.ts +12 -0
- package/dist/config/pricing.d.ts.map +1 -0
- package/dist/config/pricing.js +45 -0
- package/dist/config/pricing.js.map +1 -0
- package/dist/config/productionConfig.d.ts +8 -0
- package/dist/config/productionConfig.d.ts.map +1 -0
- package/dist/config/productionConfig.js +21 -0
- package/dist/config/productionConfig.js.map +1 -0
- package/dist/config/userConfig.d.ts +31 -0
- package/dist/config/userConfig.d.ts.map +1 -0
- package/dist/config/userConfig.js +116 -0
- package/dist/config/userConfig.js.map +1 -0
- package/dist/controlPlane/configServer.d.ts +7 -0
- package/dist/controlPlane/configServer.d.ts.map +1 -0
- package/dist/controlPlane/configServer.js +47 -0
- package/dist/controlPlane/configServer.js.map +1 -0
- package/dist/core/AgentBehaviorGraph.d.ts +163 -0
- package/dist/core/AgentBehaviorGraph.d.ts.map +1 -0
- package/dist/core/AgentBehaviorGraph.js +341 -0
- package/dist/core/AgentBehaviorGraph.js.map +1 -0
- package/dist/core/AlertManager.d.ts +19 -0
- package/dist/core/AlertManager.d.ts.map +1 -0
- package/dist/core/AlertManager.js +64 -0
- package/dist/core/AlertManager.js.map +1 -0
- package/dist/core/AuditTrail.d.ts +107 -0
- package/dist/core/AuditTrail.d.ts.map +1 -0
- package/dist/core/AuditTrail.js +256 -0
- package/dist/core/AuditTrail.js.map +1 -0
- package/dist/core/CostLedger.d.ts +135 -0
- package/dist/core/CostLedger.d.ts.map +1 -0
- package/dist/core/CostLedger.js +224 -0
- package/dist/core/CostLedger.js.map +1 -0
- package/dist/core/CostPredictionEngine.d.ts +110 -0
- package/dist/core/CostPredictionEngine.d.ts.map +1 -0
- package/dist/core/CostPredictionEngine.js +225 -0
- package/dist/core/CostPredictionEngine.js.map +1 -0
- package/dist/core/CostTruthEngine.d.ts +108 -0
- package/dist/core/CostTruthEngine.d.ts.map +1 -0
- package/dist/core/CostTruthEngine.js +170 -0
- package/dist/core/CostTruthEngine.js.map +1 -0
- package/dist/core/DetectionEngine.d.ts +147 -0
- package/dist/core/DetectionEngine.d.ts.map +1 -0
- package/dist/core/DetectionEngine.js +429 -0
- package/dist/core/DetectionEngine.js.map +1 -0
- package/dist/core/ExecutionInterceptor.d.ts +135 -0
- package/dist/core/ExecutionInterceptor.d.ts.map +1 -0
- package/dist/core/ExecutionInterceptor.js +285 -0
- package/dist/core/ExecutionInterceptor.js.map +1 -0
- package/dist/core/ExplainabilityLayer.d.ts +109 -0
- package/dist/core/ExplainabilityLayer.d.ts.map +1 -0
- package/dist/core/ExplainabilityLayer.js +277 -0
- package/dist/core/ExplainabilityLayer.js.map +1 -0
- package/dist/core/LearningSystem.d.ts +124 -0
- package/dist/core/LearningSystem.d.ts.map +1 -0
- package/dist/core/LearningSystem.js +294 -0
- package/dist/core/LearningSystem.js.map +1 -0
- package/dist/core/Logger.d.ts +122 -0
- package/dist/core/Logger.d.ts.map +1 -0
- package/dist/core/Logger.js +233 -0
- package/dist/core/Logger.js.map +1 -0
- package/dist/core/PolicyEngine.d.ts +148 -0
- package/dist/core/PolicyEngine.d.ts.map +1 -0
- package/dist/core/PolicyEngine.js +336 -0
- package/dist/core/PolicyEngine.js.map +1 -0
- package/dist/core/PricingConfig.d.ts +55 -0
- package/dist/core/PricingConfig.d.ts.map +1 -0
- package/dist/core/PricingConfig.js +132 -0
- package/dist/core/PricingConfig.js.map +1 -0
- package/dist/core/SessionStats.d.ts +101 -0
- package/dist/core/SessionStats.d.ts.map +1 -0
- package/dist/core/SessionStats.js +261 -0
- package/dist/core/SessionStats.js.map +1 -0
- package/dist/core/StateStore.d.ts +100 -0
- package/dist/core/StateStore.d.ts.map +1 -0
- package/dist/core/StateStore.js +336 -0
- package/dist/core/StateStore.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/types.d.ts +26 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/cost-guard.d.ts +41 -0
- package/dist/cost-guard.d.ts.map +1 -0
- package/dist/cost-guard.js +274 -0
- package/dist/cost-guard.js.map +1 -0
- package/dist/dashboard/roiDashboard.d.ts +12 -0
- package/dist/dashboard/roiDashboard.d.ts.map +1 -0
- package/dist/dashboard/roiDashboard.js +28 -0
- package/dist/dashboard/roiDashboard.js.map +1 -0
- package/dist/demo/compareExecution.d.ts +9 -0
- package/dist/demo/compareExecution.d.ts.map +1 -0
- package/dist/demo/compareExecution.js +43 -0
- package/dist/demo/compareExecution.js.map +1 -0
- package/dist/demo/demoRunner.d.ts +16 -0
- package/dist/demo/demoRunner.d.ts.map +1 -0
- package/dist/demo/demoRunner.js +73 -0
- package/dist/demo/demoRunner.js.map +1 -0
- package/dist/firewall/costEstimator.d.ts +3 -0
- package/dist/firewall/costEstimator.d.ts.map +1 -0
- package/dist/firewall/costEstimator.js +22 -0
- package/dist/firewall/costEstimator.js.map +1 -0
- package/dist/firewall/executionGuard.d.ts +18 -0
- package/dist/firewall/executionGuard.d.ts.map +1 -0
- package/dist/firewall/executionGuard.js +80 -0
- package/dist/firewall/executionGuard.js.map +1 -0
- package/dist/firewall/loopDetector.d.ts +13 -0
- package/dist/firewall/loopDetector.d.ts.map +1 -0
- package/dist/firewall/loopDetector.js +24 -0
- package/dist/firewall/loopDetector.js.map +1 -0
- package/dist/firewall/policy.d.ts +4 -0
- package/dist/firewall/policy.d.ts.map +1 -0
- package/dist/firewall/policy.js +16 -0
- package/dist/firewall/policy.js.map +1 -0
- package/dist/firewall/types.d.ts +38 -0
- package/dist/firewall/types.d.ts.map +1 -0
- package/dist/firewall/types.js +3 -0
- package/dist/firewall/types.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/console.d.ts +27 -0
- package/dist/logger/console.d.ts.map +1 -0
- package/dist/logger/console.js +68 -0
- package/dist/logger/console.js.map +1 -0
- package/dist/logger/database.d.ts +40 -0
- package/dist/logger/database.d.ts.map +1 -0
- package/dist/logger/database.js +127 -0
- package/dist/logger/database.js.map +1 -0
- package/dist/logger/index.d.ts +3 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +11 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/loop-shield.d.ts +48 -0
- package/dist/loop-shield.d.ts.map +1 -0
- package/dist/loop-shield.js +436 -0
- package/dist/loop-shield.js.map +1 -0
- package/dist/metrics/BusinessMetricsEngine.d.ts +109 -0
- package/dist/metrics/BusinessMetricsEngine.d.ts.map +1 -0
- package/dist/metrics/BusinessMetricsEngine.js +222 -0
- package/dist/metrics/BusinessMetricsEngine.js.map +1 -0
- package/dist/metrics/index.d.ts +11 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +17 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/middleware/expressFirewall.d.ts +51 -0
- package/dist/middleware/expressFirewall.d.ts.map +1 -0
- package/dist/middleware/expressFirewall.js +140 -0
- package/dist/middleware/expressFirewall.js.map +1 -0
- package/dist/middleware/index.d.ts +8 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +15 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/withFirewall.d.ts +50 -0
- package/dist/middleware/withFirewall.d.ts.map +1 -0
- package/dist/middleware/withFirewall.js +155 -0
- package/dist/middleware/withFirewall.js.map +1 -0
- package/dist/observability/logger.d.ts +14 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +21 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +17 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +36 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/os/ExecutionOS.d.ts +220 -0
- package/dist/os/ExecutionOS.d.ts.map +1 -0
- package/dist/os/ExecutionOS.js +398 -0
- package/dist/os/ExecutionOS.js.map +1 -0
- package/dist/os/GlobalIntelligence.d.ts +154 -0
- package/dist/os/GlobalIntelligence.d.ts.map +1 -0
- package/dist/os/GlobalIntelligence.js +374 -0
- package/dist/os/GlobalIntelligence.js.map +1 -0
- package/dist/os/PolicyMarketplace.d.ts +192 -0
- package/dist/os/PolicyMarketplace.d.ts.map +1 -0
- package/dist/os/PolicyMarketplace.js +384 -0
- package/dist/os/PolicyMarketplace.js.map +1 -0
- package/dist/os/SDKInterception.d.ts +115 -0
- package/dist/os/SDKInterception.d.ts.map +1 -0
- package/dist/os/SDKInterception.js +317 -0
- package/dist/os/SDKInterception.js.map +1 -0
- package/dist/os/index.d.ts +60 -0
- package/dist/os/index.d.ts.map +1 -0
- package/dist/os/index.js +82 -0
- package/dist/os/index.js.map +1 -0
- package/dist/proxy/index.d.ts +2 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +18 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/server.d.ts +24 -0
- package/dist/proxy/server.d.ts.map +1 -0
- package/dist/proxy/server.js +395 -0
- package/dist/proxy/server.js.map +1 -0
- package/dist/public/BenchmarksPage.d.ts +60 -0
- package/dist/public/BenchmarksPage.d.ts.map +1 -0
- package/dist/public/BenchmarksPage.js +397 -0
- package/dist/public/BenchmarksPage.js.map +1 -0
- package/dist/public/DocsPage.d.ts +11 -0
- package/dist/public/DocsPage.d.ts.map +1 -0
- package/dist/public/DocsPage.js +496 -0
- package/dist/public/DocsPage.js.map +1 -0
- package/dist/public/StatusPage.d.ts +55 -0
- package/dist/public/StatusPage.d.ts.map +1 -0
- package/dist/public/StatusPage.js +344 -0
- package/dist/public/StatusPage.js.map +1 -0
- package/dist/public/index.d.ts +12 -0
- package/dist/public/index.d.ts.map +1 -0
- package/dist/public/index.js +20 -0
- package/dist/public/index.js.map +1 -0
- package/dist/replacements/axios.d.ts +14 -0
- package/dist/replacements/axios.d.ts.map +1 -0
- package/dist/replacements/axios.js +35 -0
- package/dist/replacements/axios.js.map +1 -0
- package/dist/replacements/fetch.d.ts +13 -0
- package/dist/replacements/fetch.d.ts.map +1 -0
- package/dist/replacements/fetch.js +20 -0
- package/dist/replacements/fetch.js.map +1 -0
- package/dist/replacements/openai.d.ts +14 -0
- package/dist/replacements/openai.d.ts.map +1 -0
- package/dist/replacements/openai.js +22 -0
- package/dist/replacements/openai.js.map +1 -0
- package/dist/saas/CostExplosionDemo.d.ts +56 -0
- package/dist/saas/CostExplosionDemo.d.ts.map +1 -0
- package/dist/saas/CostExplosionDemo.js +190 -0
- package/dist/saas/CostExplosionDemo.js.map +1 -0
- package/dist/saas/LiveProtection.d.ts +61 -0
- package/dist/saas/LiveProtection.d.ts.map +1 -0
- package/dist/saas/LiveProtection.js +187 -0
- package/dist/saas/LiveProtection.js.map +1 -0
- package/dist/saas/ProductionSaaS.d.ts +56 -0
- package/dist/saas/ProductionSaaS.d.ts.map +1 -0
- package/dist/saas/ProductionSaaS.js +831 -0
- package/dist/saas/ProductionSaaS.js.map +1 -0
- package/dist/saas/SaaSServer.d.ts +50 -0
- package/dist/saas/SaaSServer.d.ts.map +1 -0
- package/dist/saas/SaaSServer.js +669 -0
- package/dist/saas/SaaSServer.js.map +1 -0
- package/dist/saas/UserStore.d.ts +49 -0
- package/dist/saas/UserStore.d.ts.map +1 -0
- package/dist/saas/UserStore.js +137 -0
- package/dist/saas/UserStore.js.map +1 -0
- package/dist/saas/billingMetrics.d.ts +14 -0
- package/dist/saas/billingMetrics.d.ts.map +1 -0
- package/dist/saas/billingMetrics.js +23 -0
- package/dist/saas/billingMetrics.js.map +1 -0
- package/dist/saas/index.d.ts +12 -0
- package/dist/saas/index.d.ts.map +1 -0
- package/dist/saas/index.js +23 -0
- package/dist/saas/index.js.map +1 -0
- package/dist/saas/telemetry.d.ts +24 -0
- package/dist/saas/telemetry.d.ts.map +1 -0
- package/dist/saas/telemetry.js +30 -0
- package/dist/saas/telemetry.js.map +1 -0
- package/dist/saas/usageMeter.d.ts +28 -0
- package/dist/saas/usageMeter.d.ts.map +1 -0
- package/dist/saas/usageMeter.js +41 -0
- package/dist/saas/usageMeter.js.map +1 -0
- package/dist/security/TrustBoundaryValidator.d.ts +105 -0
- package/dist/security/TrustBoundaryValidator.d.ts.map +1 -0
- package/dist/security/TrustBoundaryValidator.js +305 -0
- package/dist/security/TrustBoundaryValidator.js.map +1 -0
- package/dist/starters/express-protected.d.ts +18 -0
- package/dist/starters/express-protected.d.ts.map +1 -0
- package/dist/starters/express-protected.js +93 -0
- package/dist/starters/express-protected.js.map +1 -0
- package/dist/starters/langchain-protected.d.ts +18 -0
- package/dist/starters/langchain-protected.d.ts.map +1 -0
- package/dist/starters/langchain-protected.js +85 -0
- package/dist/starters/langchain-protected.js.map +1 -0
- package/dist/starters/openai-protected.d.ts +19 -0
- package/dist/starters/openai-protected.d.ts.map +1 -0
- package/dist/starters/openai-protected.js +84 -0
- package/dist/starters/openai-protected.js.map +1 -0
- package/dist/starters/serverless-protected.d.ts +19 -0
- package/dist/starters/serverless-protected.d.ts.map +1 -0
- package/dist/starters/serverless-protected.js +83 -0
- package/dist/starters/serverless-protected.js.map +1 -0
- package/dist/storage/adapters.d.ts +24 -0
- package/dist/storage/adapters.d.ts.map +1 -0
- package/dist/storage/adapters.js +123 -0
- package/dist/storage/adapters.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +8 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/tests/b2b-hardening.test.d.ts +2 -0
- package/dist/tests/b2b-hardening.test.d.ts.map +1 -0
- package/dist/tests/b2b-hardening.test.js +164 -0
- package/dist/tests/b2b-hardening.test.js.map +1 -0
- package/dist/tests/cli.contract.test.d.ts +2 -0
- package/dist/tests/cli.contract.test.d.ts.map +1 -0
- package/dist/tests/cli.contract.test.js +28 -0
- package/dist/tests/cli.contract.test.js.map +1 -0
- package/dist/tests/cli.snapshot.test.d.ts +14 -0
- package/dist/tests/cli.snapshot.test.d.ts.map +1 -0
- package/dist/tests/cli.snapshot.test.js +132 -0
- package/dist/tests/cli.snapshot.test.js.map +1 -0
- package/dist/tests/cli.strict.test.d.ts +6 -0
- package/dist/tests/cli.strict.test.d.ts.map +1 -0
- package/dist/tests/cli.strict.test.js +173 -0
- package/dist/tests/cli.strict.test.js.map +1 -0
- package/dist/tests/cli.test.d.ts +5 -0
- package/dist/tests/cli.test.d.ts.map +1 -0
- package/dist/tests/cli.test.js +54 -0
- package/dist/tests/cli.test.js.map +1 -0
- package/dist/tests/concurrency.state.test.d.ts +6 -0
- package/dist/tests/concurrency.state.test.d.ts.map +1 -0
- package/dist/tests/concurrency.state.test.js +231 -0
- package/dist/tests/concurrency.state.test.js.map +1 -0
- package/dist/tests/detection-engine.strict.test.d.ts +6 -0
- package/dist/tests/detection-engine.strict.test.d.ts.map +1 -0
- package/dist/tests/detection-engine.strict.test.js +323 -0
- package/dist/tests/detection-engine.strict.test.js.map +1 -0
- package/dist/tests/e2e.system.test.d.ts +7 -0
- package/dist/tests/e2e.system.test.d.ts.map +1 -0
- package/dist/tests/e2e.system.test.js +189 -0
- package/dist/tests/e2e.system.test.js.map +1 -0
- package/dist/tests/edge-cases.test.d.ts +6 -0
- package/dist/tests/edge-cases.test.d.ts.map +1 -0
- package/dist/tests/edge-cases.test.js +357 -0
- package/dist/tests/edge-cases.test.js.map +1 -0
- package/dist/tests/performance.benchmark.test.d.ts +2 -0
- package/dist/tests/performance.benchmark.test.d.ts.map +1 -0
- package/dist/tests/performance.benchmark.test.js +24 -0
- package/dist/tests/performance.benchmark.test.js.map +1 -0
- package/dist/tests/proxy.production.test.d.ts +6 -0
- package/dist/tests/proxy.production.test.d.ts.map +1 -0
- package/dist/tests/proxy.production.test.js +274 -0
- package/dist/tests/proxy.production.test.js.map +1 -0
- package/dist/tests/proxy.strict.test.d.ts +6 -0
- package/dist/tests/proxy.strict.test.d.ts.map +1 -0
- package/dist/tests/proxy.strict.test.js +188 -0
- package/dist/tests/proxy.strict.test.js.map +1 -0
- package/dist/tests/proxy.test.d.ts +5 -0
- package/dist/tests/proxy.test.d.ts.map +1 -0
- package/dist/tests/proxy.test.js +61 -0
- package/dist/tests/proxy.test.js.map +1 -0
- package/dist/tests/roi.scenario.test.d.ts +2 -0
- package/dist/tests/roi.scenario.test.d.ts.map +1 -0
- package/dist/tests/roi.scenario.test.js +26 -0
- package/dist/tests/roi.scenario.test.js.map +1 -0
- package/dist/tests/server.contract.test.d.ts +6 -0
- package/dist/tests/server.contract.test.d.ts.map +1 -0
- package/dist/tests/server.contract.test.js +48 -0
- package/dist/tests/server.contract.test.js.map +1 -0
- package/dist/tests/tokenCounter.test.d.ts +5 -0
- package/dist/tests/tokenCounter.test.d.ts.map +1 -0
- package/dist/tests/tokenCounter.test.js +66 -0
- package/dist/tests/tokenCounter.test.js.map +1 -0
- package/dist/tests/v113/client.test.d.ts +2 -0
- package/dist/tests/v113/client.test.d.ts.map +1 -0
- package/dist/tests/v113/client.test.js +22 -0
- package/dist/tests/v113/client.test.js.map +1 -0
- package/dist/tests/v113/executionGuard.test.d.ts +2 -0
- package/dist/tests/v113/executionGuard.test.d.ts.map +1 -0
- package/dist/tests/v113/executionGuard.test.js +39 -0
- package/dist/tests/v113/executionGuard.test.js.map +1 -0
- package/dist/token-counter/index.d.ts +2 -0
- package/dist/token-counter/index.d.ts.map +1 -0
- package/dist/token-counter/index.js +18 -0
- package/dist/token-counter/index.js.map +1 -0
- package/dist/token-counter/tokenCounter.d.ts +18 -0
- package/dist/token-counter/tokenCounter.d.ts.map +1 -0
- package/dist/token-counter/tokenCounter.js +91 -0
- package/dist/token-counter/tokenCounter.js.map +1 -0
- package/dist/trust/ImmutableAudit.d.ts +159 -0
- package/dist/trust/ImmutableAudit.d.ts.map +1 -0
- package/dist/trust/ImmutableAudit.js +340 -0
- package/dist/trust/ImmutableAudit.js.map +1 -0
- package/dist/trust/PublicVerificationLedger.d.ts +91 -0
- package/dist/trust/PublicVerificationLedger.d.ts.map +1 -0
- package/dist/trust/PublicVerificationLedger.js +223 -0
- package/dist/trust/PublicVerificationLedger.js.map +1 -0
- package/dist/trust/index.d.ts +11 -0
- package/dist/trust/index.d.ts.map +1 -0
- package/dist/trust/index.js +20 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/utils/alert.d.ts +13 -0
- package/dist/utils/alert.d.ts.map +1 -0
- package/dist/utils/alert.js +49 -0
- package/dist/utils/alert.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/wrapper/aiFirewall.d.ts +61 -0
- package/dist/wrapper/aiFirewall.d.ts.map +1 -0
- package/dist/wrapper/aiFirewall.js +117 -0
- package/dist/wrapper/aiFirewall.js.map +1 -0
- package/dist/wrapper/index.d.ts +3 -0
- package/dist/wrapper/index.d.ts.map +1 -0
- package/dist/wrapper/index.js +21 -0
- package/dist/wrapper/index.js.map +1 -0
- package/dist/wrapper/sdk.d.ts +49 -0
- package/dist/wrapper/sdk.d.ts.map +1 -0
- package/dist/wrapper/sdk.js +140 -0
- package/dist/wrapper/sdk.js.map +1 -0
- 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 @@
|
|
|
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"}
|