@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,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI OUTPUT FORMAT SNAPSHOT TESTS
|
|
4
|
+
* Freezes CLI output format to prevent string drift
|
|
5
|
+
*
|
|
6
|
+
* These tests use snapshot-style exact matching to ensure
|
|
7
|
+
* CLI output format never changes without explicit intent.
|
|
8
|
+
*
|
|
9
|
+
* If you need to change the format:
|
|
10
|
+
* 1. Update the test expectations
|
|
11
|
+
* 2. Document the change in CHANGELOG
|
|
12
|
+
* 3. Update any dependent integrations
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const child_process_1 = require("child_process");
|
|
16
|
+
const util_1 = require("util");
|
|
17
|
+
const DetectionEngine_1 = require("../core/DetectionEngine");
|
|
18
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
19
|
+
const TEST_TIMEOUT = 30000;
|
|
20
|
+
describe('CLI Output Format - Snapshot Protection', () => {
|
|
21
|
+
beforeEach(async () => {
|
|
22
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
23
|
+
await execAsync('node dist/cli/index.js config --clear-history');
|
|
24
|
+
});
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
27
|
+
});
|
|
28
|
+
describe('Safe Request Output Format', () => {
|
|
29
|
+
test('should match exact safe request format', async () => {
|
|
30
|
+
const { stdout, stderr } = await execAsync('node dist/cli/index.js check "hello world" --model gpt-4', { timeout: 10000 });
|
|
31
|
+
expect(stderr).toBe('');
|
|
32
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
33
|
+
// Header - must match exactly
|
|
34
|
+
expect(lines[0]).toMatch(/^\ud83d\udee1\ufe0f AI EXECUTION FIREWALL$/);
|
|
35
|
+
// Model line
|
|
36
|
+
expect(lines[1]).toMatch(/^Model: gpt-4$/);
|
|
37
|
+
// Tokens line
|
|
38
|
+
expect(lines[2]).toMatch(/^Tokens: \d+ \(est\. \$[0-9.]+\)$/);
|
|
39
|
+
// Status line - CRITICAL: must have "Status: " prefix (find it in output)
|
|
40
|
+
const statusLine = lines.find(l => l.includes('SAFE TO PROCEED'));
|
|
41
|
+
expect(statusLine).toMatch(/^Status: \u2705 SAFE TO PROCEED$/);
|
|
42
|
+
// Risk Level line - find it in output
|
|
43
|
+
const riskLine = lines.find(l => l.match(/^Risk Level:/));
|
|
44
|
+
expect(riskLine).toMatch(/^Risk Level: (LOW|MEDIUM|HIGH|CRITICAL)$/);
|
|
45
|
+
// Danger score line - find it in output
|
|
46
|
+
const dangerLine = lines.find(l => l.match(/^Danger Score:/));
|
|
47
|
+
expect(dangerLine).toMatch(/^Danger Score: \d+$/);
|
|
48
|
+
// Separator lines exist
|
|
49
|
+
expect(lines.some(l => l.match(/^─+$/))).toBe(true);
|
|
50
|
+
// Universal format lines exist
|
|
51
|
+
expect(lines.some(l => l.match(/^COST: [0-9.]+$/))).toBe(true);
|
|
52
|
+
expect(lines.some(l => l.match(/^RISK: (LOW|MEDIUM|HIGH|CRITICAL)$/))).toBe(true);
|
|
53
|
+
expect(lines.some(l => l.match(/^DECISION: (ALLOW|BLOCK|WARN)$/))).toBe(true);
|
|
54
|
+
// Universal Format JSON line exists
|
|
55
|
+
expect(lines.some(l => l.match(/^Universal Format: \{/))).toBe(true);
|
|
56
|
+
}, TEST_TIMEOUT);
|
|
57
|
+
});
|
|
58
|
+
describe('Duplicate Request Output Format', () => {
|
|
59
|
+
test('should detect duplicate on second identical request', async () => {
|
|
60
|
+
// Clear history first for clean test
|
|
61
|
+
await execAsync('node dist/cli/index.js config --clear-history');
|
|
62
|
+
await new Promise(r => setTimeout(r, 100));
|
|
63
|
+
// First request to prime duplicate detection
|
|
64
|
+
await execAsync('node dist/cli/index.js check "dup test" --model gpt-4');
|
|
65
|
+
await new Promise(r => setTimeout(r, 100));
|
|
66
|
+
// Second identical request should trigger duplicate detection (warning state)
|
|
67
|
+
const { stdout, stderr } = await execAsync('node dist/cli/index.js check "dup test" --model gpt-4', { timeout: 10000 });
|
|
68
|
+
expect(stderr).toBe('');
|
|
69
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
70
|
+
// Debug: log actual output if test fails
|
|
71
|
+
if (lines.length < 5) {
|
|
72
|
+
console.log('DEBUG - Actual output:', stdout);
|
|
73
|
+
console.log('DEBUG - Lines:', lines);
|
|
74
|
+
}
|
|
75
|
+
// Header
|
|
76
|
+
expect(lines[0]).toMatch(/^\ud83d\udee1\ufe0f AI EXECUTION FIREWALL$/);
|
|
77
|
+
// Model line
|
|
78
|
+
expect(lines[1]).toMatch(/^Model: gpt-4$/);
|
|
79
|
+
// Tokens line
|
|
80
|
+
expect(lines[2]).toMatch(/^Tokens: \d+ \(est\. \$[0-9.]+\)$/);
|
|
81
|
+
// Status line - should show either SAFE or warning/block status
|
|
82
|
+
// Safe: ✅ SAFE TO PROCEED, Blocked: ⚡ YOU ALMOST LOST / 🛡️ BLOCKED
|
|
83
|
+
const statusLine = lines.find(l => l.includes('\u2705 SAFE TO PROCEED') ||
|
|
84
|
+
l.includes('\u26a1 YOU ALMOST LOST') ||
|
|
85
|
+
l.includes('\ud83d\udee1\ufe0f BLOCKED'));
|
|
86
|
+
expect(statusLine).toBeDefined();
|
|
87
|
+
// Risk Level line - should be present somewhere in output
|
|
88
|
+
expect(lines.some(l => l.match(/^Risk Level: (LOW|MEDIUM|HIGH|CRITICAL)$/))).toBe(true);
|
|
89
|
+
// Danger Score should be present
|
|
90
|
+
const dangerLine = lines.find(l => l.match(/^Danger Score: /));
|
|
91
|
+
expect(dangerLine).toBeDefined();
|
|
92
|
+
const score = parseInt(dangerLine?.match(/\d+/)?.[0] || '0', 10);
|
|
93
|
+
expect(score).toBeGreaterThanOrEqual(0);
|
|
94
|
+
}, TEST_TIMEOUT);
|
|
95
|
+
});
|
|
96
|
+
describe('Output Line Count Stability', () => {
|
|
97
|
+
test('safe request should have consistent line count', async () => {
|
|
98
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "consistency test" --model gpt-4', { timeout: 10000 });
|
|
99
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
100
|
+
// Line count should be stable (between 10-25 lines including JSON)
|
|
101
|
+
expect(lines.length).toBeGreaterThanOrEqual(10);
|
|
102
|
+
expect(lines.length).toBeLessThanOrEqual(25);
|
|
103
|
+
}, TEST_TIMEOUT);
|
|
104
|
+
});
|
|
105
|
+
describe('Critical String Format Contracts', () => {
|
|
106
|
+
test('Status line must have Status: prefix', async () => {
|
|
107
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "prefix test" --model gpt-4', { timeout: 10000 });
|
|
108
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
109
|
+
// Find the status line
|
|
110
|
+
const statusLine = lines.find(l => l.includes('SAFE TO PROCEED'));
|
|
111
|
+
expect(statusLine).toBeDefined();
|
|
112
|
+
expect(statusLine).toMatch(/^Status: /);
|
|
113
|
+
}, TEST_TIMEOUT);
|
|
114
|
+
test('Risk Level line must have Risk Level: prefix', async () => {
|
|
115
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "risk test" --model gpt-4', { timeout: 10000 });
|
|
116
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
117
|
+
// Find the risk line
|
|
118
|
+
const riskLine = lines.find(l => l.match(/Risk Level:/));
|
|
119
|
+
expect(riskLine).toBeDefined();
|
|
120
|
+
expect(riskLine).toMatch(/^Risk Level: /);
|
|
121
|
+
}, TEST_TIMEOUT);
|
|
122
|
+
test('Danger Score line must have Danger Score: prefix', async () => {
|
|
123
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "score test" --model gpt-4', { timeout: 10000 });
|
|
124
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
125
|
+
// Find the danger score line
|
|
126
|
+
const scoreLine = lines.find(l => l.match(/Danger Score:/));
|
|
127
|
+
expect(scoreLine).toBeDefined();
|
|
128
|
+
expect(scoreLine).toMatch(/^Danger Score: \d+$/);
|
|
129
|
+
}, TEST_TIMEOUT);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=cli.snapshot.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.snapshot.test.js","sourceRoot":"","sources":["../../src/tests/cli.snapshot.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.strict.test.d.ts","sourceRoot":"","sources":["../../src/tests/cli.strict.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* STRICT BEHAVIORAL TESTS - CLI
|
|
4
|
+
* No existence checks. Exact output validation only.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const util_1 = require("util");
|
|
9
|
+
const DetectionEngine_1 = require("../core/DetectionEngine");
|
|
10
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
11
|
+
const TEST_TIMEOUT = 30000;
|
|
12
|
+
describe('CLI - Strict Behavioral Tests', () => {
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
// Clear both in-memory state and history file for CLI tests
|
|
15
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
16
|
+
// Clear file so CLI processes start fresh
|
|
17
|
+
await execAsync('node dist/cli/index.js config --clear-history');
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
21
|
+
});
|
|
22
|
+
describe('check command', () => {
|
|
23
|
+
test('should output exact safe request format', async () => {
|
|
24
|
+
const { stdout, stderr } = await execAsync('node dist/cli/index.js check "hello world" --model gpt-4', { timeout: 10000 });
|
|
25
|
+
expect(stderr).toBe('');
|
|
26
|
+
// Parse output lines
|
|
27
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
28
|
+
// Header line
|
|
29
|
+
expect(lines[0]).toMatch(/^\ud83d\udee1\ufe0f AI EXECUTION FIREWALL$/);
|
|
30
|
+
// Model line
|
|
31
|
+
expect(lines[1]).toMatch(/^Model: gpt-4$/);
|
|
32
|
+
// Tokens line - exact pattern
|
|
33
|
+
expect(lines[2]).toMatch(/^Tokens: \d+ \(est\. \$[0-9.]+\)$/);
|
|
34
|
+
// Status line
|
|
35
|
+
expect(lines[3]).toMatch(/^Status: \u2705 SAFE TO PROCEED$/);
|
|
36
|
+
// Risk Level line (per spec #13 - must expose risk)
|
|
37
|
+
expect(lines[4]).toMatch(/^Risk Level: (LOW|MEDIUM|HIGH|CRITICAL)$/);
|
|
38
|
+
// Danger score line
|
|
39
|
+
expect(lines[5]).toMatch(/^Danger Score: 0$/);
|
|
40
|
+
// Separator line
|
|
41
|
+
expect(lines[6]).toMatch(/^─+$/);
|
|
42
|
+
// Universal output format (per spec #11)
|
|
43
|
+
expect(lines[7]).toMatch(/COST:/);
|
|
44
|
+
expect(lines[8]).toMatch(/RISK:/);
|
|
45
|
+
expect(lines[9]).toMatch(/DECISION:/);
|
|
46
|
+
// No SAVED for safe requests
|
|
47
|
+
// Second separator
|
|
48
|
+
expect(lines[10]).toMatch(/^─+$/);
|
|
49
|
+
// Universal Format JSON
|
|
50
|
+
expect(lines[11]).toMatch(/Universal Format:/);
|
|
51
|
+
// Cost line at end
|
|
52
|
+
expect(lines[lines.length - 1]).toMatch(/^Estimated Cost: \$[0-9.]+$/);
|
|
53
|
+
}, TEST_TIMEOUT);
|
|
54
|
+
test('should output exact duplicate detection format', async () => {
|
|
55
|
+
// First request - safe
|
|
56
|
+
await execAsync('node dist/cli/index.js check "duplicate me" --model gpt-4');
|
|
57
|
+
await new Promise(resolve => setTimeout(resolve, 100));
|
|
58
|
+
// Second request - triggers duplicate (1 existing)
|
|
59
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "duplicate me" --model gpt-4');
|
|
60
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
61
|
+
// New format has impact-driven banner, check for key elements
|
|
62
|
+
expect(stdout).toContain('YOU ALMOST LOST');
|
|
63
|
+
expect(stdout).toContain('BLOCKED BEFORE EXECUTION');
|
|
64
|
+
expect(stdout).toContain('DETAILS:');
|
|
65
|
+
expect(stdout).toContain('RISK:');
|
|
66
|
+
expect(stdout).toContain('DECISION:');
|
|
67
|
+
expect(stdout).toContain('SAVED:');
|
|
68
|
+
expect(stdout).toContain('WOULD HAVE LOST:');
|
|
69
|
+
}, TEST_TIMEOUT);
|
|
70
|
+
test('should output exact loop/kill-switch format', async () => {
|
|
71
|
+
// Send multiple rapid requests to trigger danger
|
|
72
|
+
for (let i = 0; i < 5; i++) {
|
|
73
|
+
await execAsync('node dist/cli/index.js check "loop test" --model gpt-4');
|
|
74
|
+
}
|
|
75
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "loop test" --model gpt-4');
|
|
76
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
77
|
+
// New format has impact-driven banner, check for key elements
|
|
78
|
+
expect(stdout).toContain('YOU ALMOST LOST');
|
|
79
|
+
expect(stdout).toContain('BLOCKED BEFORE EXECUTION');
|
|
80
|
+
expect(stdout).toContain('DETAILS:');
|
|
81
|
+
expect(stdout).toContain('RISK:');
|
|
82
|
+
expect(stdout).toContain('DECISION:');
|
|
83
|
+
expect(stdout).toContain('SAVED:');
|
|
84
|
+
expect(stdout).toContain('WOULD HAVE LOST:');
|
|
85
|
+
}, TEST_TIMEOUT);
|
|
86
|
+
test('should output exact cost spike format', async () => {
|
|
87
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "expensive prompt with many tokens to calculate" --model gpt-4');
|
|
88
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
89
|
+
// New format has banner for blocked requests, so check for key elements
|
|
90
|
+
expect(stdout).toContain('AI EXECUTION FIREWALL');
|
|
91
|
+
expect(stdout).toContain('Model:');
|
|
92
|
+
expect(stdout).toContain('Tokens:');
|
|
93
|
+
expect(stdout).toContain('Estimated Cost:');
|
|
94
|
+
}, TEST_TIMEOUT);
|
|
95
|
+
});
|
|
96
|
+
describe('report command', () => {
|
|
97
|
+
test('should output exact report format', async () => {
|
|
98
|
+
// Create some test data
|
|
99
|
+
await execAsync('node dist/cli/index.js check "report test 1" --model gpt-4');
|
|
100
|
+
await execAsync('node dist/cli/index.js check "report test 2" --model gpt-4');
|
|
101
|
+
const { stdout } = await execAsync('node dist/cli/index.js report');
|
|
102
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
103
|
+
// Header
|
|
104
|
+
expect(lines[0]).toMatch(/^\ud83d\udcca FIREWALL PROTECTION REPORT$/);
|
|
105
|
+
expect(lines[1]).toMatch(/^={30,}$/);
|
|
106
|
+
// Time window
|
|
107
|
+
expect(lines[2]).toMatch(/^Time Window: Last \d+ hours$/);
|
|
108
|
+
// Statistics lines (no empty line due to filter)
|
|
109
|
+
expect(lines[3]).toMatch(/^Total Requests: \d+$/);
|
|
110
|
+
expect(lines[4]).toMatch(/^Blocked: \d+$/);
|
|
111
|
+
expect(lines[5]).toMatch(/^Warned: \d+$/);
|
|
112
|
+
expect(lines[6]).toMatch(/^Total Cost: \$[0-9.]+$/);
|
|
113
|
+
expect(lines[7]).toMatch(/^Prevented Cost: \$[0-9.]+$/);
|
|
114
|
+
}, TEST_TIMEOUT);
|
|
115
|
+
test('should report exact count of 3 requests', async () => {
|
|
116
|
+
await execAsync('node dist/cli/index.js check "count 1" --model gpt-4');
|
|
117
|
+
await execAsync('node dist/cli/index.js check "count 2" --model gpt-4');
|
|
118
|
+
await execAsync('node dist/cli/index.js check "count 3" --model gpt-4');
|
|
119
|
+
const { stdout } = await execAsync('node dist/cli/index.js report');
|
|
120
|
+
const totalLine = stdout.split('\n').find(l => l.includes('Total Requests:'));
|
|
121
|
+
expect(totalLine).toBe('Total Requests: 3');
|
|
122
|
+
}, TEST_TIMEOUT);
|
|
123
|
+
});
|
|
124
|
+
describe('blocked command', () => {
|
|
125
|
+
test('should output exact blocked log format', async () => {
|
|
126
|
+
// Trigger blocks with duplicates
|
|
127
|
+
await execAsync('node dist/cli/index.js check "block log test" --model gpt-4');
|
|
128
|
+
await execAsync('node dist/cli/index.js check "block log test" --model gpt-4');
|
|
129
|
+
await execAsync('node dist/cli/index.js check "block log test" --model gpt-4');
|
|
130
|
+
const { stdout } = await execAsync('node dist/cli/index.js blocked');
|
|
131
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
132
|
+
// Header
|
|
133
|
+
expect(lines[0]).toMatch(/^\ud83d\udeab FIREWALL BLOCK LOG$/);
|
|
134
|
+
expect(lines[1]).toMatch(/^={25,}$/);
|
|
135
|
+
// Recent Blocks section
|
|
136
|
+
expect(lines[2]).toMatch(/^Recent Blocks:$/);
|
|
137
|
+
// Block entry format (duplicate or loop)
|
|
138
|
+
const blockLine = lines.find(l => l.includes('block log test'));
|
|
139
|
+
expect(blockLine).toMatch(/^\[.+\] \[(duplicate|loop)\] block log test \(Score: \d+\)$/);
|
|
140
|
+
}, TEST_TIMEOUT);
|
|
141
|
+
test('should show empty log when no blocks', async () => {
|
|
142
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
143
|
+
const { stdout } = await execAsync('node dist/cli/index.js blocked');
|
|
144
|
+
expect(stdout).toContain('No blocked requests in the last 24 hours');
|
|
145
|
+
}, TEST_TIMEOUT);
|
|
146
|
+
});
|
|
147
|
+
describe('config command', () => {
|
|
148
|
+
test('should output exact config format', async () => {
|
|
149
|
+
const { stdout } = await execAsync('node dist/cli/index.js config');
|
|
150
|
+
const lines = stdout.split('\n').filter(l => l.trim());
|
|
151
|
+
expect(lines[0]).toMatch(/^\u2699\ufe0f FIREWALL CONFIGURATION$/);
|
|
152
|
+
expect(lines[1]).toMatch(/^={25,}$/);
|
|
153
|
+
expect(lines.some(l => l.includes('Trust Mode:'))).toBe(true);
|
|
154
|
+
expect(lines.some(l => l.includes('Danger Threshold:'))).toBe(true);
|
|
155
|
+
expect(lines.some(l => l.includes('Max Cost:'))).toBe(true);
|
|
156
|
+
}, TEST_TIMEOUT);
|
|
157
|
+
});
|
|
158
|
+
describe('CLI exit codes', () => {
|
|
159
|
+
test('should exit with code 0 on safe check', async () => {
|
|
160
|
+
const result = await execAsync('node dist/cli/index.js check "safe" --model gpt-4');
|
|
161
|
+
// exec throws on non-zero exit, so reaching here means exit code 0
|
|
162
|
+
expect(result.stdout).toContain('SAFE TO PROCEED');
|
|
163
|
+
}, TEST_TIMEOUT);
|
|
164
|
+
test('should exit with code 0 on report command', async () => {
|
|
165
|
+
const result = await execAsync('node dist/cli/index.js report');
|
|
166
|
+
expect(result.stdout).toContain('FIREWALL PROTECTION REPORT');
|
|
167
|
+
}, TEST_TIMEOUT);
|
|
168
|
+
test('should exit with code 1 on invalid command', async () => {
|
|
169
|
+
await expect(execAsync('node dist/cli/index.js invalid-command')).rejects.toBeDefined();
|
|
170
|
+
}, TEST_TIMEOUT);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
//# sourceMappingURL=cli.strict.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.strict.test.js","sourceRoot":"","sources":["../../src/tests/cli.strict.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/tests/cli.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Integration tests for CLI commands with persistent storage
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const util_1 = require("util");
|
|
8
|
+
const DetectionEngine_1 = require("../core/DetectionEngine");
|
|
9
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
10
|
+
const TEST_TIMEOUT = 15000; // 15 seconds for file I/O operations
|
|
11
|
+
describe('CLI Commands', () => {
|
|
12
|
+
// Clear history before tests to ensure clean state
|
|
13
|
+
beforeAll(() => {
|
|
14
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
15
|
+
});
|
|
16
|
+
afterAll(() => {
|
|
17
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
18
|
+
});
|
|
19
|
+
test('check command should validate safety and show output', async () => {
|
|
20
|
+
const { stdout } = await execAsync('node dist/cli/index.js check "test prompt" --model gpt-4');
|
|
21
|
+
expect(stdout).toContain('AI EXECUTION FIREWALL');
|
|
22
|
+
expect(stdout).toContain('Model:');
|
|
23
|
+
expect(stdout).toContain('Tokens:');
|
|
24
|
+
expect(stdout).toContain('Estimated Cost:');
|
|
25
|
+
}, TEST_TIMEOUT);
|
|
26
|
+
test('check command should detect duplicates across multiple calls', async () => {
|
|
27
|
+
// Clear history first
|
|
28
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
29
|
+
// First call is safe
|
|
30
|
+
const result1 = await execAsync('node dist/cli/index.js check "duplicate test prompt" --model gpt-4');
|
|
31
|
+
expect(result1.stdout).toContain('SAFE TO PROCEED');
|
|
32
|
+
// Second call triggers duplicate (1 existing)
|
|
33
|
+
const result2 = await execAsync('node dist/cli/index.js check "duplicate test prompt" --model gpt-4');
|
|
34
|
+
expect(result2.stdout).toMatch(/DUPLICATE|DANGER DETECTED/);
|
|
35
|
+
}, TEST_TIMEOUT);
|
|
36
|
+
test('report command should show accumulated statistics', async () => {
|
|
37
|
+
// Clear and add some requests
|
|
38
|
+
DetectionEngine_1.detectionEngine.clear();
|
|
39
|
+
// Add a few requests
|
|
40
|
+
await execAsync('node dist/cli/index.js check "test1" --model gpt-4');
|
|
41
|
+
await execAsync('node dist/cli/index.js check "test2" --model gpt-4');
|
|
42
|
+
await execAsync('node dist/cli/index.js check "test3" --model gpt-4');
|
|
43
|
+
// Check report shows accumulated requests
|
|
44
|
+
const { stdout } = await execAsync('node dist/cli/index.js report');
|
|
45
|
+
expect(stdout).toContain('FIREWALL PROTECTION REPORT');
|
|
46
|
+
expect(stdout).toContain('Total Requests:');
|
|
47
|
+
expect(stdout).toContain('3');
|
|
48
|
+
}, TEST_TIMEOUT);
|
|
49
|
+
test('blocked command should show block log', async () => {
|
|
50
|
+
const { stdout } = await execAsync('node dist/cli/index.js blocked');
|
|
51
|
+
expect(stdout).toContain('FIREWALL BLOCK LOG');
|
|
52
|
+
}, TEST_TIMEOUT);
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=cli.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/tests/cli.test.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,iDAAqC;AACrC,+BAAiC;AACjC,6DAA0D;AAE1D,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAClC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,qCAAqC;AAEjE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,iCAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,iCAAe,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,0DAA0D,CAAC,CAAC;QAC/F,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC9E,sBAAsB;QACtB,iCAAe,CAAC,KAAK,EAAE,CAAC;QAExB,qBAAqB;QACrB,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oEAAoE,CAAC,CAAC;QACtG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEpD,8CAA8C;QAC9C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,oEAAoE,CAAC,CAAC;QACtG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC9D,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACnE,8BAA8B;QAC9B,iCAAe,CAAC,KAAK,EAAE,CAAC;QAExB,qBAAqB;QACrB,MAAM,SAAS,CAAC,oDAAoD,CAAC,CAAC;QACtE,MAAM,SAAS,CAAC,oDAAoD,CAAC,CAAC;QACtE,MAAM,SAAS,CAAC,oDAAoD,CAAC,CAAC;QAEtE,0CAA0C;QAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACjD,CAAC,EAAE,YAAY,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.state.test.d.ts","sourceRoot":"","sources":["../../src/tests/concurrency.state.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|